当前位置: 技术问答>linux和unix
请问如何暂停一个线程,又如何继续运行?(在线等)
来源: 互联网 发布时间:2015-05-21
本文导语: 最好能用QThread说明,谢谢,说明原理也行,就是一般如何达到这样的功能,该线程中是一个while(1)循环,一直在运行的,我只想暂停它,到一定的时候再继续运行。 | 用信号量 //phread route wh...
最好能用QThread说明,谢谢,说明原理也行,就是一般如何达到这样的功能,该线程中是一个while(1)循环,一直在运行的,我只想暂停它,到一定的时候再继续运行。
|
用信号量
//phread route
while (1)
{
sem_wait(&sem);
....
}
// other codes whitch you want resume thread
sem_post(&sem);
//phread route
while (1)
{
sem_wait(&sem);
....
}
// other codes whitch you want resume thread
sem_post(&sem);
|
非也!
互斥锁是需要的,但并非和sleep一起用。先定义好互斥量,然后在主线程内控制它(pause=true;),然后在子线程循环内读取,然后qapplication;;postevent(qcustomevent(yourevent)携带paused信息)给主线程,when you need start it,you set pause = false。
双重循环:
while(!stop)
{
mutex->lock();
pause = isPause;
mutex->unlock();
while(!isPause)
{
dosomething();
}
}
互斥锁是需要的,但并非和sleep一起用。先定义好互斥量,然后在主线程内控制它(pause=true;),然后在子线程循环内读取,然后qapplication;;postevent(qcustomevent(yourevent)携带paused信息)给主线程,when you need start it,you set pause = false。
双重循环:
while(!stop)
{
mutex->lock();
pause = isPause;
mutex->unlock();
while(!isPause)
{
dosomething();
}
}
|
用信号!
pthread_signal()!
pthread_signal()!
|
可以用互斥锁pthread_mutexx_lock,在你需要线程运行的时候得到lock,在while(1)循环中采用time()来调整线程运行时间。