私はカスタムクラスのため、このコード「sau_timer」を持つ:ブーストスレッドとタイマー、C++
sau_timer::sau_timer(int secs, timerparam f, vector<string> params) : strnd(io),
t(io, boost::posix_time::seconds(secs))
{
assert(secs > 0);
this->f = f;
this->params = params;
t.async_wait(strnd.wrap(boost::bind(&sau_timer::exec, this, _1)));
boost::thread thrd(boost::bind(&boost::asio::io_service::run, &io));
io.run();
}
void sau_timer::exec(const boost::system::error_code&) {
(f)(params);
}
を、私はそれをしたい私はsau_timerオブジェクトを作るとき、タイマーが起動し、それにプログラムの実行を許可するように、持続する。 (「こんにちは!」)
はint main(int argc, char* argv[])
{
vector<string> args(1);
args[0] = "Hello!";
sau_timer timer_test(3, sau_prompt, args);
args[0] = "First!";
sau_prompt(args);
timer_test.thrd.join();
return 0;
}
ここに私の意図は、そのtimer_testがsau_promptを呼び出す前に3秒待機タイマーを開始、作られているが、そのsau_prompt(たとえば、これは()のメインである「ファースト!」 )が最初に呼び出されます。現在のところ、最初の前にプロンプトにHelloが表示され、タイマーが3秒間プログラム全体を停止してから続行することを示しています。タイマーをバックグラウンドで実行します。
私は間違っていますか?コードはコンパイルされます...
ありがとうございます。
\t timer_test.io.run(); sau_timer timer_test(3、sau_prompt、args)の行の下にあります。 main()でio.run()をクラスコンストラクタから削除しましたが、効果は変わりません。私は誤解したことを恐れる? – Xenoprimate
サンプルコードは、asioの一般的な使用方法を理解するのに十分なはずです。実行するスレッドを作成するのではなく、オブジェクトがタイマーやレシーバオブジェクトと言うのではなく、io_servicesを実行する複数のスレッドを作成し、それらのスレッド化されたio_servicesがスレッド/同時の方法で非同期呼び出しを実行できるようにすることです。 –