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

标签 c++ multithreading

我有一个从消息队列中读取的类。现在这个类里面也有一个线程。根据 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/

相关文章:

c - posix 线程(pthread_create 和 pthread_join)

c++ - 从函数 : What is it compiled down to? 返回花括号初始化器列表

c++ - 从 CString 中获取一个字符

c# - char[] c 和 char c[] 有什么区别?

java EventQueue.invokeLater 中设置的对象为 null

c++ - 用户级线程是如何调度/创建的,内核级线程是如何创建的?

c++ - 尝试使用QT的网络库时报错2027

c++ - 循环无缘无故重复?

ios - 使用 AFNetworking NSOperations 连续下载大量文件......内存不足

c++ - 如何使用 boost::thread_group 使用多客户端服务器?