我有一个从消息队列中读取的类。现在这个类里面也有一个线程。根据 msg q 中 msg 的类型,它需要在该线程内执行不同的函数,因为类中的主线程始终等待 msg q。一旦从队列中读取消息,它会检查其类型并调用适当的方法在线程中执行,然后返回再次读取(在 while 循环中读取)。
我正在使用 boost message q 和 boost threads 我怎样才能做到这一点。 它是这样的:
while(!quit) {
try
{
ptime now(boost::posix_time::microsec_clock::universal_time());
ptime timeout = now + milliseconds(100);
if (mq.timed_receive(&msg, sizeof(msg), recvd_size, priority, timeout))
{
switch(msg.type)
{
case collect:
{
// need to call collect method in thread
}
break;
case query:
{
// need to call query method in thread
}
break;
等等。 可以吗?
如果可以完成,那么当线程说正在执行 collect 方法并且主线程收到查询消息并想要调用它时会发生什么。 提前致谢。
最佳答案
在接收线程执行长操作时到达的消息将被存储以备后用(在队列中,等待处理)。
如果线程完成了它的操作,它会回来并再次调用接收函数,并立即获取它不在查找时到达的第一条消息并可以处理它。
如果主线程需要消息处理操作的结果,它会阻塞,直到工作线程完成并传递结果。
确保您没有在轮流等待主线程操作的工作线程内执行任何操作,否则存在死锁的风险。
关于c++ - 在c++中调用线程中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125522/