C std ::成员函数的线程

C std ::成员函数的线程,第1张

概述我正在尝试编写一个命令行服务器,它将从串行端口接收信息,解析它,并将其记录在内部对象中. 然后,根据客户端的请求,服务器将返回所请求的信息. 我想做的是放接收器和放大器.解析器部分在一个单独的线程中,以使服务器一起运行,而不是干扰数据收集. #include <iostream>#include <thread>class exampleClass{ std::thread *pro 我正在尝试编写一个命令行服务器,它将从串行端口接收信息,解析它,并将其记录在内部对象中.

然后,根据客户端的请求,服务器将返回所请求的信息.

我想做的是放接收器和放大器.解析器部分在一个单独的线程中,以使服务器一起运行,而不是干扰数据收集.

#include <iostream>#include <thread>class exampleClass{    std::thread *processthread;    public voID completeProcess(){        while(1){            processstep1();            if (verification()){processstep2()}        }    };    voID processstep1(){...};    voID processstep2(){...};    bool verification(){...};    voID runThreaded();} // End example class deFinition// The IDea being that this thread runs independently// until I call the object's destructorexampleClass::runThreaded(){    std::thread processthread(&exampleClass::completeProcess,this);} // Unfortunately The program ends up crashing here with CIGARET
解决方法 您正在成员函数中运行本地线程.您必须加入或分离它,因为它是本地的,您必须在函数本身中执行此 *** 作:
exampleClass::runThreaded(){    std::thread processthread(&exampleClass::completeProcess,this);    // more stuff    processthread.join();} //

我猜你真正想要的是启动数据成员线程而不是启动本地线程.如果你这样做,你仍然必须在某个地方加入它,例如在析构函数中.在这种情况下,您的方法应该是

exampleClass::runThreaded(){    processthread = std::thread(&exampleClass::completeProcess,this);}

和析构函数

exampleClass::~exampleClass(){    processthread.join();}

和processthread应该是一个std :: thread,而不是指向一个的指针.

关于设计的注意事项:如果要使用runThreaded方法作用于线程数据成员,则必须非常小心在连接线程之前不要多次调用它.在构造函数中启动线程并将其连接到析构函数中可能更有意义.

总结

以上是内存溢出为你收集整理的C std ::成员函数的线程全部内容,希望文章能够帮你解决C std ::成员函数的线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存