0

カスタムクラス「sau_timer」のコードは次のとおりです。

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 オブジェクトを作成すると、タイマーが開始されますが、プログラムの実行は継続できるようにしたいと考えています。たとえば、これは main() です。

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("Hello!") を呼び出す前に 3 秒待機するタイマーを開始することですが、sau_prompt("First!") が最初に呼び出されます。現時点では、First の前のプロンプトに Hello が表示されており、タイマーがプログラム全体を 3 秒間停止してから続行できることを示しています。タイマーをバックグラウンドで実行したい。

私は何を間違っていますか?コードはコンパイルされます...

ありがとうございました。

4

2 に答える 2