0

我有一个从消息队列中读取的类。现在这个类里面也有一个线程。根据 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方法并且主线程得到查询消息并想要调用它时会发生什么。提前致谢。

4

1 回答 1

1

在接收线程执行长操作时到达的消息将被存储以备后用(在队列中,等待处理)。

如果线程完成了它的操作,它会回来并再次调用接收函数,并立即获取它没有查看时到达的第一条消息并可以处理它。

如果主线程需要消息处理操作的结果,它会阻塞,直到工作线程完成并传递结果。

确保在等待主线程操作的工作线程内不要做任何事情,否则会有死锁的风险。

于 2012-08-25T20:56:54.837 回答