我有一个自定义类“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,表示计时器正在暂停整个程序三秒钟,然后才允许它继续。我希望计时器在后台运行。
我究竟做错了什么?代码编译...
谢谢你。