我正在使用C++進行項目工作。如何使用Boost庫創建TimerHandler
我想被稱爲指定時間後TimerHandler,但在同一時間,我不希望阻止在下面的代碼當前線程或io.run之後的任何代碼():
#include <iostream>
#include <string>
#include <boost/format.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
class TimerTest
{
public:
static void PrintOutTimerHandler(const boost::system::error_code&, const std::string& message)
{
std::cout << "PrintOutTimerHandler called: " << ", message: " << message << std::endl;
}
void run()
{
boost::asio::io_service io;
boost::asio::deadline_timer dt(io, boost::posix_time::seconds(5));
std::cout << "Start:\t" << std::endl;
dt.async_wait(boost::bind(PrintOutTimerHandler, boost::asio::placeholders::error, std::string("here is the message")));
// Do some job here
for (int i = 0; i < 1000000; ++i)
++i, --i;
std::cout << "End:\t" << std::endl;
io.run();
std::cout << "When to reach here 1: " << std::endl;
}
};
int main()
{
TimerTest tt;
tt.run();
std::cout << "When to reach here 2: " << std::endl;
return 0;
}
/* Current output:
Start:
End:
PrintOutTimerHandler called: , message: here is the message
When to reach here 1:
When to reach here 2:
*/
/* Expected output:
Start:
End:
When to reach here 1:
When to reach here 2:
PrintOutTimerHandler called: , message: here is the message
*/
我想我已經說清楚了。我的問題是:
- 如果可以不 引入一個新的線程,諸如Flex 的ActionScript來解決,這是最好的,但 我想不會(我猜的ActionScript是 使用隱藏線);
- 如果我們必須 引入一個額外的線程做 工作,你會介意爲我寫下 僞代碼嗎?
謝謝。
Peter
感謝您的回覆。我試圖將新線程應用於我的示例。但我不知道如何,請你幫我一下? – 2011-05-17 15:49:40
@OcrunC,請忽略我上面的評論。我得到了它的工作。謝謝。 – 2011-05-17 21:31:15
你會介意看看我的另一篇文章:http://stackoverflow.com/questions/6076524/why-my-eventtimer-implemented-by-boostasioio-service-and-boostdeadline-time – 2011-05-20 19:33:33