0

我是 Qt 的新手,我读了一篇关于 QT 下的多线程的文章。似乎这样做的最佳方法是创建一个派生自 QThread 并实现 run 方法的类。在 Objective-C 和 GCD 下,您可以使用块(一种函数指针),您只需将它们传递给队列即可。我认为每次我想将某些东西交换到不同的线程时,为该特定任务创建一个新类是很奇怪的。

所以我现在的问题是,是否可以将函数指针传递给 QT 中 Objective-C 下的 GCD 之类的线程处理?

4

2 回答 2

3

Qt 线程的最佳方法不是从 QThread 派生。如果您这样做,请阅读此内容,了解您做错的原因。

相反,创建一个 QThread 对象并将您的小部件移动到该线程。

QThread pThread = new QThread(parentObject);
//Assuming we have a class based on QObject
myObject->moveToThread(pThread);  // move our object to the thread
pThread->start(); // start the thread

然后,您可以使用信号和槽与线程和对象进行通信。通过这样做,您还可以将多个对象移动到新线程,而不再需要为每个类创建一个新的、继承的 QThread 对象。

于 2013-08-21T10:55:12.267 回答
1

是的,您可以使用 Qt Concurrent 框架在不同的线程中运行函数。来自文档的示例:

extern void aFunctionWithArguments(int arg1, double arg2, const QString &string);

int integer = ...;
double floatingPoint = ...;
QString string = ...;

QFuture<void> future = QtConcurrent::run(aFunctionWithArguments, integer, floatingPoint, string);

http://qt-project.org/doc/qt-4.8/qtconcurrentrun.html

于 2013-08-21T10:49:08.287 回答