StupidBeauty
Read times:1165Posted at:Mon Jan 3 22:13:43 2011 - no title specified

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 opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands