0
我有一個自定義類「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之前等待三秒計時器,但sau_prompt((「你好!」)「第一!」 )將首先被調用。目前,Hello在第一次提示之前顯示,表明計時器正在暫停整個程序三秒鐘,然後才允許繼續。我想讓計時器在後臺運行。
我在做什麼錯?代碼彙編...
謝謝。
我把\t timer_test.io.run();在行sau_timer timer_test(3,sau_prompt,args)下面;在main()中,並從類構造函數中移除了io.run(),但效果仍然相同。我擔心我誤解了? – Xenoprimate 2009-08-27 16:23:43
示例代碼應該足以讓您瞭解如何使用asio。您看到這個想法並不是創建線程來運行,而是將對象稱爲計時器或接收器對象,而是創建運行io_services的多個線程,並讓這些線程io_services以線程/併發方式運行異步調用。 – 2009-08-28 19:20:08