下面是一个用定时器封装线程的测试类的实现。 奇怪的是,如果截止日期设置为500毫秒,它可以工作,但如果我将其设置为1000毫秒,则不会。我究竟做错了什么?boost deadline_timer issue
#include "TestTimer.hpp"
#include "../SysMLmodel/Package1/Package1.hpp"
TestTimer::TestTimer(){
thread = boost::thread(boost::bind(&TestTimer::classifierBehavior,this));
timer = new boost::asio::deadline_timer(service,boost::posix_time::milliseconds(1000));
timer->async_wait(boost::bind(&TestTimer::timerBehavior, this));
};
TestTimer::~TestTimer(){
}
void TestTimer::classifierBehavior(){
service.run();
};
void TestTimer::timerBehavior(){
std::cout<<"timerBehavior\r";
timer->expires_at(timer->expires_at() + boost::posix_time::milliseconds(1000));
timer->async_wait(boost::bind(&TestTimer::timerBehavior,this));
}
UPDATE 1 我已经注意到,程序stucks(或至少标准输出在控制台许多秒,约30),那么大量的“timerBehavior”字符串一起打印出来,如果他们已经在某个地方排队了。
你应该确保,你的服务没有失去工作。没有任何东西阻止线程先启动并运行service.run()一次。然后在线程失效后,TestTimer c'tor的第二行被执行。 – 2012-07-28 11:49:07
我应该怎么做? – Sindico 2012-07-28 12:00:21
@Torsten:我已更新了我的问题,并提供了更多详细信息。我使用Eclipse与gcc – Sindico 2012-07-28 12:44:20