在c ++中调用线程中的方法

时间:2012-08-25 20:46:17

标签: c++ multithreading

我有一个从消息队列中读取的类。现在这个类里面也有一个线程。根据msg q中msg的类型,它需要在该线程内执行不同的函数,因为类中的主线程始终在msg q上等待。一旦它从队列中读取消息,它就会检查其类型并调用在线程中执行的适当方法,然后再次返回读取(读取while循环)。

我正在使用提升消息q和提升线程 我怎样才能做到这一点。 它是这样的:

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方法并且主线程获取查询消息并想要调用它时会发生什么。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

如果线程完成了它的操作,它将返回并再次调用receive函数,并立即获得在它没有查看时到达的第一条消息,并且可以处理它。

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

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