私は Stackoverflow で同様の質問をしましたが、まだ良い答えが得られません:
この信号/スロットがどのように達成されるかについて、私はかなり困惑しています。
Q1: 以下のコードから、sig が 2 つの関数 (Hello() と World()) に接続されており、関数がシリアル化された方法で呼び出されているように見えます。これは、1 つの関数 (Hello()) が別の関数(World())に入る前に完了しますか? =>シングルスレッドプログラム
Q2: マルチスレッドのシグナル/スロットを有効にする方法はありますか? (=> World() はすぐに開始されます。Hello() が完了するのを待つ必要はありません。) または、推奨されない場合は、その理由を教えてください。 ?
struct Hello
{
void operator()() const { std::cout << "Hello";}
};
struct World
{
void operator()() const { std::cout << ", World!" << std::endl;}
};
boost::signal<void ()> sig;
sig.connect(Hello());
sig.connect(World());
sig();
出力: ハロー、ワールド!