我想知道是否有办法在Qt中取消暂停睡眠线程
我使用QThread :: msleep(ms)函数暂停线程
而且我想在时间耗尽之前取消该线程
有什么办法吗?
答案 0 :(得分:4)
首先,如果你使用QSerialPort
,你真的不必搞乱线程。你应该异步处理它。因此,您read()
在连接到readyRead()
信号的插槽中,如果您希望在写入之间有一些延迟,请在连接到其{{1}的插槽中使用QTimer
和write()
根据@ deW1的评论建议发出信号。
如果你真的想要多线程,@ sploid的代码方法有很多错误:
互斥锁必须仅由锁定它的线程解锁。以下是documentation for QMutex::unlock()
所说的内容:
解锁互斥锁。 尝试在与锁定它的线程不同的线程中解锁互斥锁会导致错误。解锁未锁定的互斥锁会导致未定义的行为。
QMutex
用于保护对象,数据结构或代码段,以便一次只能有一个线程访问它。它不用于信号某个其他线程的线程。QWaitCondition
允许线程告诉其他线程已满足某种条件。这是您需要用来告诉其他线程" 取消暂停"。以下是它应该如何完成的:
timeout()
答案 1 :(得分:-2)
QMutex mut;
void InterruptMethod() {
mut.unlock();
}
void SleepMethod() {
mut.lock();
const int kTimeout = 5000;
bool over_event_come = mut.tryLock(kTimeout); // here was sleep
if (over_event_come) {
// unlock from another place
} else {
// exit by timeout
}
mut.unlock();
}