将抽象重写的方法传递给Boost::Thread
Passing abstract overridden method to Boost::Thread
我有一个抽象类simModbusServer
,它有一个抽象方法run()
。它还有这个方法:
void simModbusServer::start() {
serverThread = boost::thread(&simModbusServer::run);
}
这当然是在simModbusServer
的子类中调用的,我是否正确地假设这将在子类run()
方法上创建一个线程,该线程覆盖simModbusServer
的抽象方法?
不,你必须使用boost::bind
,因为run()
是一个成员函数,它接受一个隐式的this
指针:
#include <boost/bind.hpp>
void simModbusServer::start() {
serverThread = boost::thread(
boost::bind(&simModbusServer::run, this));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
对于新版本的Boost,似乎您也可以将this
直接作为boost::thread
的构造函数的第二个参数传递(如果您使用std::thread
,则会这样做),如下所示:
void simModbusServer::start() {
serverThread = boost::thread(&simModbusServer::run, this);
}
在这种情况下,您不需要Boost.Bind.
相关文章:
- 无法将参数传递给 boost::thread 构造函数
- 如何使用boost.thread运行多个接收器,每个线程应该分配给每个接收器?
- 使用 boost::thread 运行函子,但析构函数被错误地调用
- thread_specific_pointer可以在哪些平台上工作而无需 boost::thread?
- 将 boost::thread 与 C++11 std::mutex 混合使用是否安全?
- 同时使用 boost.python 和 boost.thread 时出现编译错误
- Boost.thread代码在Ubuntu和Windows中表现出不同的行为
- Pointer to boost::thread
- Linux上多核计算的低性能(openMP、boost::thread等)
- boost - thread.join() halts the ui
- 将基类的引用传递给 boost::thread 并在派生类中调用虚函数是否有效
- Difference between boost::thread and std::thread
- std::thread是boost::thread的替代品吗?
- 将 boost/thread headers 与 clang++ (Windows) 一起使用时出现问题
- 在linux下使用boost::thread创建一个boost::asio工作线程
- 如何在Windows上的CodeBlocks中构建和配置boost.thread
- C++ ReadConsoleInput 不适用于 boost::thread
- Boost.Thread超时等待
- 如何使用boost::thread创建线程池
- 使用std::vector和boost::thread进行内存管理