msec php,关于QThread::wait(msec)函数的讨论

博客内容讨论了QThread::wait()函数的使用,该函数会阻塞调用线程,直到线程结束或者达到指定时间。在测试中,发现在wait期间,主线程被阻塞导致用户界面无响应,而子线程依然继续执行。作者对于wait期间子线程是否被阻塞产生了疑问。此外,还提到了wait函数与pthread_join()的相似性以及不建议在main函数中对主线程调用wait。
摘要由CSDN通过智能技术生成

关于QThread::wait(msec)函数的讨论

之前再回帖时候提到线程中的wait函数,文档中是这样描述的

bool QThread::wait ( unsigned long time = ULONG_MAX )

Blocks the thread until either of these conditions is met:

-The thread associated with this QThread object has finished execution (i.e. when it returns from run()). This function will return true if the thread has finished. It also returns true if the thread has not been started yet.

-time milliseconds has elapsed. If time is ULONG_MAX (the default), then the wait will never timeout (the thread must return from run()). This function will return false if the wait timed out.

This provides similar functionality to the POSIX pthread_join() function.

大概意思是:这个函数阻塞线程直到满足下面的条件之一

- 与这个线程对象关联的线程已经结束执行(例如从run函数返回)。如果线程结束返回真值。如果线程还没有开始也返回真值

- 到达定时结束时刻。如果定时是ULONG_MAX (默认值),线程就会一直等下去(线程必须从run函数返回)。时间到,函数返回假值

这个函数提供了跟POSIX系统上的 pthread_join()很相似的功能。

原贴本来是问sleep函数的,因为是静态保护函数,所以我推荐用wait函数。另外我做了一些测试,大致过程如下:

测试环境:vista+qt4.5.2+vc2008sp1+qt-vs-integration1.4.3

1.在vc中创建qt工程

2.加入MyThread类,继承至QThread,实现run函数,一个无限循环打印函数

3.主窗口加入3个按钮,相应的类中加入一个MyThread指针变量mythread,在构造函数中new一个MyThread

4.三个按钮的鼠标单击事件分别调用mythread->start(QThread::LowPriority), thread->wait(10000)和thread->terminate()用来启动,暂停十秒和终止线程的功能

测试的时候发现一个问题,wait函数虽然能够阻塞指定的时间,但是在阻塞期间,主窗口无法响应而子线程的打印依然在进行,直到时间到,主窗口才恢复响应,这里不明白到底是子线程被阻塞还是主线程被阻塞了?按照我的理解应该是mythread停止打印10秒钟才对。还是说打印的功能反应太慢了,我看到的打印数据是在调用wait之前的呢?最迷惑的还是主窗口怎么在这期间没有反应呢?尽管我启动线程的时候使用了较低的优先级别。有高手希望这里能给解释一下,多谢了!

顺便提示一下那位网友,你在main函数中通过调用静态函数QThread::currentThread()->wait(10000)来对主线程测试是达不到你想要的结果的,wait函数立即返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值