2012-08-25 76 views
0

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

我正在使用助推消息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方法并且主线程获取查询消息并且想要调用它时会发生什么情况。 在此先感谢。

+0

问题? msg.type在消息中,并且正在接通它。当一些线程接近它时,新的消息只会排队等待处理。我不明白,超时的东西 - 大概你有一些必须执行的东西,如果没有消息收到100毫秒? –

回答

1

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

如果线程完成其操作,它将返回并再次调用receive函数,并立即获取第一个到达时不到的消息并且可以处理它。

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

请确保您不在工作线程内执行任何操作,而这些工作线程又会等待主线程的操作,否则会存在死锁的风险。

+0

感谢您的解释。但是,我该如何等待以及如何根据消息类型在同一个线程中调用不同的fns? – user333422