http://no001.blog.51cto.com/1142339/276984 QThread Class Reference [QtCore module] 该类提供平台独立的线程。 #include 继承QObject 公共类型 enum Priority { IdlePriority, LowestPriority, LowPriority, NormalPriority, ..., InheritPriority } 公共函数 QThread ( QObject * parent = 0 ) ~QThread ()void exit ( int returnCode = 0 )bool isFinished () constbool isRunning () constPriority priority () constvoid setPriority ( Priority priority )void setStackSize ( uint stackSize )uint stackSize () constbool wait ( unsigned long time = ULONG_MAX ) 公共槽 void quit ()void start ( Priority priority = InheritPriority )void terminate ()信号 void finished ()void started ()void terminated ()静态公共成员 QThread * currentThread ()Qt::HANDLE currentThreadId ()int idealThreadCount ()void yieldCurrentThread () 受保护的函数 int exec ()virtual void run ()静态受保护的成员 void msleep ( unsigned long msecs )void setTerminationEnabled ( bool enabled = true ) void sleep ( unsigned long secs )void usleep ( unsigned long usecs )详细描述 一个QThread代表一个独立的线程控制在程序中。它分享数据和所有其他的线程,但是独立运行在一个多任务的操作系统中。代替开始 在main中,QThread开始在run。默认的,run开始时间循环,通过调用exec。为了创建你自己的线程,建QThread的子类,并继承run。 例如: class MyThread : public QThread { public: void run(); }; void MyThread::run() { QTcpSocket socket; // connect QTcpSocket's signals somewhere meaningful ... socket.connectToHost(hostName, portNumber); exec(); } 这将创建一个QTcpSocket在这个线程中,运行线程的时间循环。使用start方法来开始运行。当你返回从run,运行结束,就像一个应 用那样当你离开main。QThread将注意你发出一个信号,当线程started,finished,terminated,或者你能用 isFinished和isRunning 来查询线程的状态,使用wait来阻塞,直到线程已经完成运行。 每个线程得到他自己的堆栈从操作系统中。操作系统也决定堆栈的默认大小。你能使用setStackSize来设置一个惯例的堆栈大小。 每个QThread能有他自己的事件循环。你能开始事件循环通过调用exec。你能停止它通过调用exit或quit。拥有一个事件循环使信号和 槽的链接成为可能。使用一个机制叫做队列链接。它也使使用那些要求事件循环的类成为可能,例如QTimer和QTcpSocket。注意,尽 管如此,那是不可能的使用任何widget的类。 在极端情况下,你可能想强制terminate一个线程。尽管如此,那样做是危险地和应该被阻止的。请读文件为terminate和 setTerminationEnabled。 静态函数currentThreadId和currentThread返回目前运行的线程的标示符。 QThread也提供平台独立的sleep函数。使用sleep,msleep,usleep。 成员类型文件 enum QThread::Priority enum 类型代表操作系统怎样安排新产生的线程。 内容 值 描述 QThread::IdlePriority 0 安排只是当没有其他线程在运行 QThread::LowestPriority 1 安排少于低优先级 QThread::LowPriority 2 安排少于正常优先级 QThread::NormalPriority 3 默认的操作系统优先级 QThread::HighPriority 4 安排高于正常优先级 QThread::HighestPriority 5 安排高于高优先级 QThread::TimeCriticalPriority 6 尽可能的安排 QThread::InheritPriority 7 使用同样的优先级,这是默认的 成员函数文件 QThread::QThread(QObject* parent=0) 构造一个新的线程用被给的parent。这个线程不开始运行直到start被调用 QThread::~QThread () 摧毁线程 注意删除一个线程对象将不停止运行线程。删除一个运行的QThread将可能导致一个程序冲突。你能wait来确保它完成。 QThread * QThread::currentThread () [static] 返回一个代表目前运行的线程的指针。 Qt::HANDLE QThread::currentThreadId () [static] 返回线程句柄。 警告:该函数返回的句柄是被使用为了内部目的,不应该被用于任何应用的代码。 在 windows,返回值是一个假句柄。它不能被使用为数值比较。这个函数返回DWORD返回被win32函数getCurrentThreadId,不是被 getCurrentThread返回的handle。 int QThread::exec () [protected] 进入事件循环,等直到exit被调用。如果通过quit调用exit,返回值将是0。那是必须的调用这个函数来开始事件循环。 void QThread::exit ( int returnCode = 0 ) 告诉线程的事件循环来退出 在调用这个函数后,线程离开事件循环,返回从 QEventLoop::exec()。并且返回返回码。 根据协定,返回0代表成功,非0代表失败 注意不像c函数,这个函数返回 caller—it is event processing thar stops. 如果没有一个事件循环,这个函数不做任何事情。 void QThread::finished () [signal] 这个信号被发出当线程结束运行。 int QThread::idealThreadCount () [static] 返回能被运行在系统上的理想的线程数。 bool QThread::isFinished () const 返回true如果线程是完成的。 bool QThread::isRunning () const void QThread::msleep ( unsigned long msecs ) [static protected] Priority QThread::priority () const 返回一个线程的优先级,如果函数不运行,返回inheritPriority void QThread::quit () [slot] 等同于exit(0). void QThread::run () [virtual protected] 线程的开始点。在调用start后,新的线程调用这个函数,默认的继承调用exec。 你能重载这个函数来做其他有用的工作。 void QThread::setPriority ( Priority priority ) 设置优先级 void QThread::setStackSize ( uint stackSize ) 设置最大的堆栈大小为线程。 警告:大部分操作系统预设最大和最小限制在线程堆栈大小上。这个线程将失败开始,如果堆栈是不在这个限制范围内 void QThread::setTerminationEnabled ( bool enabled = true ) [static protected] 设置terminate()函数的有效性。 void QThread::sleep ( unsigned long secs ) [static protected] uint QThread::stackSize () const void QThread::start ( Priority priority = InheritPriority ) [slot] 开始运行程序通过调用run。 void QThread::started () [signal] 当线程开始,发出该信号。 void QThread::terminate () [slot] 终止运行的线程。这个线程可能马上终止,也可能延时终止。在terminate后使用wait 同步终止。 警告:这个函数是危险地,不被鼓励使用。 void QThread::terminated () [signal] void QThread::usleep ( unsigned long usecs ) [static protected] bool QThread::wait ( unsigned long time = ULONG_MAX ) 阻塞线程直到这些情况被遇到 线程结束运行。 Time已经过去。(超时) void QThread::yieldCurrentThread () [static] 让开线程给另一个可运行的线程。注意这由操作系统决定