我想在pthread中运行一个回调函数。
我目前陷入以下代码:
//maintest.cpp
....
main{
...
//setting up the callback function SimT:
boost::asio::io_service io;
boost::asio::deadline_timer t(io);
SimT d(t);
//calling io.run() in another thread with io.run()
pthread_t a;
pthread_create( &a, NULL, io.run(),NULL); ----->Here I dont know how to pass the io.run() function
...
//other stuff that will be executed during io.run()
}
我应该如何在pthread_create参数中指定io.run()? 谢谢
答案 0 :(得分:2)
您需要将指针传递给非成员函数,例如:
extern "C" void* run(void* io) {
static_cast<io_service*>(io)->run();
return nullptr; // TODO report errors
}
pthread_create(&a, nullptr, run, &io);
当然,现在没有必要使用本机线程库:
std::thread thread([&]{io.run();});
答案 1 :(得分:0)
您可能想要创建一个仿函数对象并将其传入。有关详细信息,请查看:C++ Functors - and their uses
编辑:如果你正在使用C ++ 11,这个解决方案会更清晰:passing Lambda to pthread_create?