1

ブーストスレッドで実行されているコードがあり、メインスレッドによって処理されているものを変更しますが、これは機能しておらず、理にかなっています。

androidHandlerでは、メインスレッドでコードを実行するメッセージキューであるがあり、このハンドラーに必要なパラメーターを渡すことができます。

ブーストでも同じことをしたい

だから私のメインスレッドで私は次のことをします:

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も理解できません。

誰かが私のためにそれをばかにしてくれませんか?私が理解できないほど抽象的なものを書かないでください、私はこれに経験がありません。ありがとうございました

4

1 に答える 1

5

はい、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 ラムダをサポートしていない場合は、bind--を使用postしてください。

于 2012-12-03T11:00:24.673 に答える