- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个路径跟踪器,并希望通过线程将其并行化。我有一个关于 QT 中多线程对象的设计问题,特别是关于 QRunnable 类。
在我下面的(伪代码)中,我有一个启动 PTRunnable 实例的类“PathTracer”,它扩展了 QRunnable。
向 QRunnable 对象传递一个指向创建它们的类的指针,以便每个 QRunnable 都可以访问该类 (doWork) 提供的静态方法是否合适?我的理由是,如果出于某种原因我希望禁用多线程,PathTracer 实例仍将在没有冗余的情况下实现必要的方法。
或者有更好的设计?私有(private)实例变量 m_data 会怎样? qrunnable 对象会在共享的 m_data 上运行,还是会制作指针数据的拷贝?
#include <QThreadPool>
#include <vector>
class PathTracer
{
public:
static void doWork(PathTracer * pt, Pixel pix);
protected:
void renderImage();
void modifyData();
private:
int m_data;
};
PathTracer::renderImage()
{
for (int x=0; x<width; x++)
{
for (int y=0; y<height; y++)
{
pixelblock.push_back(Pixel(x,y));
}
}
// pass instance of self to each worker
PTRunnable ptworker(this, pixelblock);
QThreadPool::globalInstance()->start(ptworker);
};
void modifyData()
{
m_data++;
}
static void PathTracer::doWork(PathTracer * pt, Point p)
{
pt->modifyData();
}
//////////////////////////////
class PTRunnable : public QRunnable
{
Q_OBJECT
public:
explicit PTRunnable(QObject *parent = 0);
PTRunnable(PathTracer * pt, PixelList pixels);
void run(); // runnable implementation goes here
signals:
public slots:
private:
PathTracer * m_pt; // owns pointer to pathtracer that spawned this
protected:
};
PTRunnable::PTRunnable(PathTracer * pt, PixelBlock block)
{
m_pt = pt;
}
void PTRunnable::run()
{
pt->doWork(this, block[0]);
}
最佳答案
更好的方法是让这些静态方法插入并从 QRunnable 实例发出信号/如果您希望从函数中获得一些返回值,则将信号发送回 QRunnable 对象。
这将是线程安全的,您不需要传递/存储任何指针 - 因为通过传递/存储指针,您会遇到尝试访问已删除对象的潜在风险。
如果你愿意,你可以将指向 PathTracer 的指针传递给 PTRunnable 的构造函数以连接所有信号和槽,但是将指针存储为类成员将是一个糟糕的设计理念 - 没有必要存储它,并存储它随着代码的增长,将来会很容易出错。
关于c++ - QThreadPool & QRunnable & 静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508288/
谁能提供一个使用 QThreadPool 类中的“reserveThread”和/或“releaseThread”的例子?我已阅读文档,但我真的不明白您何时会使用这些功能。互联网搜索示例已空空如也。
我目前正在使用 QThreadPool 来运行一些计算,但是我发现如果我将所有东西都扔进 QThreadPool,它实际上表现不佳并且似乎导致了一些崩溃问题。所以我的想法是一次只有几个线程传递到 QT
我正在“搞乱”线程池,我注意到一个奇怪的异常。所以我在这里问你:我是否正确使用了这个对象?或者您认为这只是一个错误或一个虚拟警告?这里是。我用 QThreadPool 实现了一个基本示例(它与文档中的
在尝试 QThreadPool 之前,我认为多线程程序可能会产生不确定的结果,具体取决于操作系统如何调度它。不过,今天我的看法有点改变。 这是来自 main.cpp 的代码: runnableInst
我正在寻找一些关于使用 QThreadPool 的简明示例。这是我的使用方法: QThreadPool *thread_pool = QThreadPool::globalInstance(); My
如何覆盖 PyQt5 QThreadPool ?是否可以 ? 关注这篇文章https://www.learnpyqt.com/tutorials/multithreading-pyqt-applica
我目前正在将共享指针与 QThreadPool 一起用于多线程应用程序。但是,当线程完成计算时,我遇到了崩溃。 假设类 A 继承自 QRunnable,当传入共享指针作为参数时,它会更新其类变量。这是
我正在编写一个路径跟踪器,并希望通过线程将其并行化。我有一个关于 QT 中多线程对象的设计问题,特别是关于 QRunnable 类。 在我下面的(伪代码)中,我有一个启动 PTRunnable 实例的
我有很多长时间运行的任务在我的 Python 应用程序的后台运行。我把它们都放在了全局QThreadPool中。当用户退出时,所有这些后台任务都需要停止。 现在,我有以下代码: app.aboutTo
我想并行运行 pyqt5 QThreads,但我的代码似乎按顺序运行,有人能告诉我如何并行运行 QThreads 吗? 我的代码的输出:我预计它是并行运行的,而不是按顺序运行的。 Multithrea
我想将多线程 webkit 与 QThreadPool 一起使用 我的代码是: webkitrunnable.cpp: webkitRunnable::webkitRunnable(QUrl inpu
我有一个应该在线程中运行的类,并且需要一个事件循环用于插槽,目前我用 moveToThread() 运行它很好, 但我想使用 QThreadPool我遇到了一个问题。 当使用 QThreadPool
我正在尝试处理大量的 csv 数据,因为它是成 block 的。如果我在没有线程的情况下运行 chunkprocess,应用程序不会崩溃。但是,一旦我添加到线程池中,应用程序就会崩溃并引发以下错误。
我正在做一个使用 QSqlDatabase 的项目。现在我正在使用 QtConcurrent (QFuture) 来执行任何 SQL 命令。 现在,使用 QFuture 运行的每个新命令都会创建新的
我知道一般的理论,线程,QRunnable 和 QThreadPool。它是如何适应的?我的意思是当 QRunnable 的一个实例被创建并分配给 ThreadPool 时,启动一个线程意味着什么?多
我正在构建一个小型多线程 Web 服务器。 QTcpSockets 在主线程中获取,然后由 QtConcurrent 移交给 QThreadPool,后者最终处理数据并发出答案。 我的问题是套接字是在
在应用程序中使用 QThreadPool::globalInstance() 时,我可以将最大线程数设置为一个数字(例如本例中的 50) QThreadPool::globalInstance()->
我在阅读 Qt 的信号与槽 [1] 时注意到它声称信号和槽的开销比任何新操作或删除操作都要低得多。所以我做了一个测试: #include #include #include #include
背景: 我有一个脚本,允许我通过来自私有(private)编辑器的 API 对 PostgreSQL 数据库进行空间查询(我无法直接查询数据库)。该 API 适用于 python 3.2。简而言之,该
我对 QThreadPool 的工作原理感到困惑,并且找不到答案。我想要这样的东西: class Task : public QRunnable { solve problem #nb } 现在,例如
我是一名优秀的程序员,十分优秀!