【发布时间】:2012-06-29 09:31:32
【问题描述】:
我有两个线程,假设线程“A”和线程“B”。 线程“A”发布自定义QEvent到线程“B”,然后它应该等待线程“B”处理这个事件。
到目前为止我做了什么:
我的活动课:
class IPCMessageEvent : public QEvent
{
public:
IPCMessageEvent(QWaitCondition* pConditions) : QEvent(IPC_MESSAGE_RECEIVED)
, mpWaitCondition(pConditions)
{ };
~IPCMessageEvent()
{
mpWaitCondition->wakeOne();
};
private:
QWaitCondition* mpWaitCondition;
};
我的线程“A”:
QWaitCondition recvCondition;
IPCMessageEvent* pEvent = new IPCMessageEvent(&recvCondition);
QCoreApplication::postEvent(gpApp, pEvent);
QMutex mutex;
mutex.lock();
recvCondition.wait(&mutex, IPC_MESSAGE_WAIT_TIMEOUT);
我的线程“B”:处理接收到的事件并销毁它。 ~IPCMessageEvent 析构函数被调用,因此wakeOne() 将为线程“A”中的recvCondition 启动。
一切似乎都很好,只是一件事! 看起来有时 ~IPCMessageEvent 的调用时间比预期的要早...
QCoreApplication::postEvent(gpApp, pEvent);
<---- pEvent is already destroyed here ---->
QMutex mutex;
mutex.lock();
所以我的recvCondition.wait(&mutex, IPC_MESSAGE_WAIT_TIMEOUT); 将被锁定并达到超时。
还有其他方法可以进行这种同步吗? 或者也许有人对如何解决/克服这个问题有任何建议?
【问题讨论】:
-
顺便说一句,你真的应该回到你之前的问题并接受最好的答案。否则,人们将根本不再理会您的问题,而您将来也不会得到任何答案。
-
感谢 Johannes S. 的提示 ;)
标签: c++ qt thread-synchronization