Multithreading QT中是否有类似GCD的多线程方法?

Multithreading QT中是否有类似GCD的多线程方法?,multithreading,qt,grand-central-dispatch,Multithreading,Qt,Grand Central Dispatch,我不熟悉Qt,我读了一篇关于Qt下的多线程的文章。这样做的最佳方法似乎是创建一个从QThread派生并实现run方法的类。在Objective-C和GCD下,您可以使用块(一种函数指针),只需将它们传递给队列即可。我认为每当我想把一些东西换到另一个线程时,为那个特定的任务创建一个新类是很奇怪的 所以我现在的问题是,是否可以在QT中的Objective-C下将函数指针传递给某些线程处理,如GCD?是的,您可以使用QT并发框架在不同的线程中运行函数。 文档中的一个示例: extern void aF

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


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

是的,您可以使用QT并发框架在不同的线程中运行函数。 文档中的一个示例:

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);
extern void affunctionwitharguments(int arg1,double arg2,const QString&string);
整数=。。。;
双浮点=。。。;
QString字符串=。。。;
QFuture future=QtConcurrent::run(带有参数、整数、浮点、字符串的函数);

是的,您可以使用Qt并发框架在不同的线程中运行函数。 文档中的一个示例:

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);
extern void affunctionwitharguments(int arg1,double arg2,const QString&string);
整数=。。。;
双浮点=。。。;
QString字符串=。。。;
QFuture future=QtConcurrent::run(带有参数、整数、浮点、字符串的函数);

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对象。

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对象。

另请参见