您的位置:首页 > 编程语言 > Qt开发

QT qthread详解

2015-12-24 15:19 381 查看
创建线程的方法一般都是重写qthread,或者继承qobect,详见QT助手

class Worker : public QObject

 {

     Q_OBJECT

 public slots:

     void doWork() {

         ...

     }

 };

 void MyObject::putWorkerInAThread()

 {

     Worker *worker = new Worker;

     QThread *workerThread = new QThread(this);

     connect(workerThread, SIGNAL(started()), worker, SLOT(doWork()));

     connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));

     worker->moveToThread(workerThread);

     // Starts an event loop, and emits workerThread->started()

     workerThread->start();

 }

QThread     概述

当使用 started(), finished(), and terminated(),会发送一个信号,可以使用isFinished() and isRunning()来查询线程的状态,

停止线程调用 exit() or quit(),在极端的情况下,在线程正在执行的时候调用 terminate() ,这样做是很危险的,详细查看terminate()和 setTerminationEnabled() ,

wait()用来阻塞当前线程,直到另一个线程执行结束或者指定的时间到达

 currentThreadId() and currentThread()这两个静态函数用来获取线程ID和线程对象

QThread函数解读

QThread::QThread ( QObject * parent = 0 )          创建一个对象

QThread::~QThread ()  析构删除一个对象,要强制析构的话, isFinished()先要查询下线程是否结束,否则会引起线程崩溃

QThread * QThread::currentThread () [static] 返回一个线程指针,用来管理目前正在执行的线程

Qt::HANDLE QThread::currentThreadId () [static] 返回一个线程ID,这个函数返回的句柄用于内部目的并且不应该在任何应用程序代码中使用它

int QThread::exec () [protected] 线程循环函数,当调用exit()退出,如果是通过quit()调用exit()退出,则返回0

void QThread::exit ( int returnCode = 0 )  告诉时间循环结束,带着一个返回码

void QThread::finished () [signal]当线程完成时,发送此信号

int QThread::idealThreadCount () [static]返回CPU核数

bool QThread::isFinished () const 如果线程完成返回true

bool QThread::isRunning () const 如果线程正在运行返回true

void QThread::msleep ( unsigned long msecs ) [static protected] 迫使当前线程 睡眠多少毫秒

Priority QThread::priority () const  返回线程的优先级

void QThread::quit () [slot]    退出等同于 QThread::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]//当设置为false时,以后调用 QThread::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]//强制关闭线程

void QThread::terminated () [signal]//信号

bool QThread::wait ( unsigned long time = ULONG_MAX )//线程挂起多久

void QThread::yieldCurrentThread () [static]

让开线程给另一个可运行的线程。注意这由操作系统决定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: