我有计时器实施与增压(144 - >最新的lib)。 这个计时器是在一个嘘声线程内启动的。定时器还启动一个线程 ,其中一个io_service主持截止计时器,直到线程终止。 这样一个连续的计时器。 需要定时器的boost线程是从DLL中创建的。asio :: io_service挂在破坏
当宿主应用程序调用DLL ExitInstance函数时。卸载 该DLL。 ExitInstance函数停止线程和定时器之前。 但我的计时器中的io_service销毁永远不会返回,所以应用程序挂起。
这种情况不是,当我能够调用ExitInstance之前调用Dispose函数。但是,有些应用程序正在加载我的DLL,因此没有机会调用此公开函数。
任何人都知道,如何解决这个问题?
这是我的计时器核心代码。它是在线程停止前重新启动服务 的线程。通过设置_stop标志和 将死亡定时器设置为1毫秒,线程得到停止。 摘要:在Dll :: ExitInstance被破坏时挂起。不挂起,如果DLL的:: ExitInstance中 之前destrcuted谢谢
void tcTimerThread::timerLoop(void)
{
_running=true;
/// create asynch service
_io_service = new boost::asio::io_service;
/// create timer
_pTimer = new boost::asio::deadline_timer(*_io_service);
while(_stop==false)
{
_pTimer->expires_from_now(boost::posix_time::milliseconds(_delay));
/// bind timer event function
_pTimer->async_wait(boost::bind(&tcTimerThread::timerEvent,this,boost::asio::placeholders::error));
try
{
if(_stop==false)
{
/// reset async
_io_service->reset();
/// wait for timer event
_io_service->run();
}
}
catch(...)
{
}
}
try
{
_io_service->stop();
delete _pTimer;
delete _io_service;
}
catch(...)
{
}
_running=false;
}
将调试器附加到挂起的应用程序时,回溯是什么样的? – 2010-09-19 22:13:27