QT qthread详解

创建线程的方法一般都是重写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]

让开线程给另一个可运行的线程。注意这由操作系统决定


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值