从升压线程运行在主线程上的功能和参数传递给函数(Running a function on the

2019-07-04 10:17发布

我有一些代码在修改的东西由不正常的主线程处理升压线程中运行,它是有道理的。

在Android上我将有Handler ,其是将执行在主线程我的代码,我可以通过我想这个处理程序的任何参数的消息队列。

我想这样做有增强同

所以在我的主线程我做到以下几点:

boost::thread workerThread(boost::bind(&SomeClass::pollService, this));

我pollService方法:

SomeClass::pollService()
{
     //get some stuff from a web service
     //parse the json response
     //NEEDED part: call a function to be executed on the main thread and hand it some functions
}

PS我已经看过很多io_service.post例子,我仍然不知道如何做到这一点,而且我读的答案,建议把使用asio strand ,但我也无法理解它。

可有一个人请哑下来给我吗? 请不要写的东西非常抽象,我不会明白,我不是在这个经历。 谢谢

Answer 1:

是的, io_service::post()是一个方便的工具来从一个线程到另一个岗位函子,但目标线程应执行io_service::run() ,这是阻挡功能(这是一种io_service “消息循环”)。 因此,假设你的主线程看起来是这样的:

int main()
{
  // do some preparations, launch other threads...
  // ...
  io_service io;
  io.run();
}

......假设你要访问io从对象pollService在另一个线程运行,你可以做到以下几点:

SomeClass::pollService()
{
  // do something...
  // ...
  io.post([=] { doStuffThatShoudRunInMainThread(); });
}

如果你的编译器不支持C ++ 11个lambda表达式,使用bind -但请注意, post希望零元函子,即一个函数对象,不接受参数。



文章来源: Running a function on the main thread from a boost thread and passing parameters to that function