0

我想在 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() ?谢谢

4

2 回答 2

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();});
于 2013-11-06T15:00:04.167 回答
0

您可能想要创建一个仿函数对象并将其传入。有关更多信息,请查看:C++ Functors - and their uses

编辑:如果您使用的是 C++11,这个解决方案会更干净:将 Lambda 传递给 pthread_create?

于 2013-11-06T14:33:31.660 回答