У меня есть этот код для пользовательского класса '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!»), Но этот sau_prompt («First!») Будет вызван первым. В данный момент в приглашении перед First отображается Hello, указывая, что таймер останавливает всю программу на три секунды, прежде чем продолжить. Я хочу, чтобы таймер работал в фоновом режиме.
Что я делаю не так? Код компилируется ...
Спасибо.