Multithreading 在Qt中实现临界截面
Multithreading 在Qt中实现临界截面,multithreading,qt,qt4,locking,Multithreading,Qt,Qt4,Locking,我需要在Qt(4.7.3,WindowsXP)中实现关键部分 例如,公共插槽: void MyClass::myPublicSlot(…本地参数…) { … 使用全局参数的代码块; } 功能void myPublicSlot由计时器启动。 执行该功能可能需要很长时间,有时需要超过计时器的滴答声(或者,例如,单击按钮)。 需要锁定使用全局参数的代码块 函数调用可以分为多线程和单线程 另外,我尝试使用QMutex和QMutexLocker,但它在单线程情况下会导致死锁。QMutex正是您想要的。也
我需要在Qt(4.7.3,WindowsXP)中实现关键部分 例如,公共插槽:
void MyClass::myPublicSlot(…本地参数…)
{
…
使用全局参数的代码块;
}
功能void myPublicSlot
由计时器启动。执行该功能可能需要很长时间,有时需要超过计时器的滴答声(或者,例如,单击按钮)。
需要锁定使用全局参数的
代码块
函数调用可以分为多线程和单线程
另外,我尝试使用QMutex和QMutexLocker,但它在单线程情况下会导致死锁。
QMutex
正是您想要的。也许您正在递归地使用它,但没有创建递归互斥体?这是单线程代码中死锁的唯一解释。函数是递归的吗?然后需要使用递归QMutex。否则,您的程序的语义可能有点错误。函数不是递归的。但是它包含qApp->processEvent(),可以让它运行更多次。谢谢!它的工作原理是:。。。私有:>可变QMutex*互斥体代码>../!按钮单击处理程序void主窗口::在按钮上单击(){QMutexLocker locker(互斥);Q_UNUSED(locker);qDebug()处理事件(QEventLoop::AllEvents,90);qDebug()