我正在尝试将状态机实现为名为"的类的一部分。来源交易"。 Evey-time我在主线程中收到一个请求,它生成这个类的一个实例,状态机开始执行,直到它到达一个状态,它必须等待#34; event_handler&#中主线程的响应34 ;.为了解决这个问题,我正在使用boost库实现一个条件变量,如下所示:
来源交易类
boost::mutex mut;
boost::condition_variable cond;
wait_ho_complete_indication_state:
{
mState = SRC_WAIT_HO_COMPLETE_INDICATION;
boost::unique_lock<boost::mutex> lock(mut);
while (!response_received)
{
cond.wait(lock);
}
response_received = false;
goto success_state;
}
在主文件中,我有以下内容:
主要类
Event_Handler function:
// Find the source transaction which corresponds to this Indication
src_transaction_ptr t;
tpool->find(msg.source(), mobile_id.to_string(), t);
{
boost::lock_guard<boost::mutex> lock(t->mut);
t->response_received = true;
}
t->cond.notify_one();
// Dome some stuff
我的问题是,每次执行代码时,状态机都会被困在&#34; wait_ho_complete_indication_state&#34;并且它不会离开该状态,而且event_handler没有报告它已收到任何事件。就像主要被绞死一样。
所以我的问题是条件变量的实现有什么问题吗?
非常感谢。