Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在Qt中实现临界截面_Multithreading_Qt_Qt4_Locking - Fatal编程技术网

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()