Qt中的多线程技术
Qt提供了许多用于处理线程的类和函数。 以下是Qt程序员可以用来实现多线程应用程序的四种不同方法。
QThread:带有可选事件循环的低级API
QThread
是Qt中所有线程控制的基础。 每个QThread
实例表示并控制一个线程。
QThread
可以直接实例化或派生子类。 实例化QThread
提供了一个并行事件循环,允许在辅助线程中触发QObject
的slots
。 继承QThread
则允许应用程序在启动其事件循环之前初始化新线程,或者在没有事件循环的情况下运行并行代码。
示例:
//TestThread.h
class TestThread : public QThread
{
Q_OBJECT
private:
void run();
};
//TestThread.cpp
void TestThread::run()
{
qDebug() << "这是在一个新的线程里: " << thread()->currentThreadId();
}
//main.cpp
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
TestThread thread;
thread.start();
qDebug() << "这是在GUI主线程里:" << app.thread()->currentThreadId();
thread.wait(); // 在thread运行后才可以停止。
return 0;
}
QThreadPool和QRunnable:重用线程
经常创建和销毁线程可能非常的耗费资源。 为了减少这种开销,可以重用现有的线程来执行新的任务。