我有計時器實施與增壓(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