Qt4.7.0文档翻译:QThread类参考,QThread Class Reference
QThread 类提供与平台无关的线程。
一个QThread表示程序中的一个单独的控制线程;它与同一进程中的其它所有线程共享数据 ,但是以 一个多任务的操作系统中的独立程序的方式来 独立地 运行。QThread不是从 main() 开始执行的 ,而是从 run ()开始的。默认地 , run ()通过调用 exec ()来启动事件循环 (下面有例子)。要创建你自己的线程,就继承QThread并且重载 run () 。例如:
class MyThread : public QThread
{
public:
void run();
};
void MyThread::run()
{
QTcpSocket socket;
// 在别的有意义的地方连接QTcpSocket 的信号
...
socket.connectToHost(hostName, portNumber);
exec();
}
这将在线程里创建一个 QTcpSocket ,并且启动线程的事件循环。使用 start ()方法来开始执行。当你从 run ()返回时 ,执行就结束咯,就好像一个程序离开main()之后就结束一样 。 当那个线程启动 ( started ()) 、结束 ( finished ()) 和终止 ( terminated ()) 时 ,QThread 会通过一个信号告诉你,或者你可以使用 isFinished ()和 isRunning ()来查询那个线程的状态 。使用 wait ()来阻塞自己,直到那个线程结束了运行 。
每个线程 都从操作系统获取它自己的栈。操作系统还确定栈的默认大小 。你可以使用 setStackSize ()来设置一个自定义的栈大小 。
每个QThread 都可以有它自己的事件循环。你可以通过调用 exec ()来启动事件循环;你可以通过调用 exit ()或者 quit ()来停止它 。在一个线程中有了事件循环就使得可以使用一 种叫做 排队连接( queued connections ) 的机制来将其它线程中的信号连接到这个线程中的信号槽上。它也 使得可以在线程里面使用那些需要有事件循环的类 ,例如 QTimer 和 QTcpSocket 。然而 ,注意,不可能在线程里面使用任何的部件类 。
在极端情况下 ,你可能想要强制终止 ( terminate ())一个正在执行的线程。然而 ,这么做是危险的 ,并且不被提倡的。请阅读 terminate ()和 setTerminationEnabled ()的文档 ,以了解细节信息。
静态函数 currentThreadId ()和 currentThread ()返回当前正在执行的线程的标识符 。前一个函数为线程返回一个与平台相关的标识符 ;后一个函数返回一个QThread 指针 。
QThread 还提供了与平台无关的不同精度的睡眠函数 。使用 sleep ()来实现 整秒的精度,使用 msleep ()来实现毫秒的精度,使用 usleep ()来实现微秒的精度。
参考 Qt 中的线程支持 、 QThreadStorage 、 QMutex 、 QSemaphore 、 QWaitCondition 、 Mandelbrot示例 、 Semaphores示例 和 等待条件( Wait Conditions )示例 。
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands