后面的部分是我的程序,但它不能像我期望的那样工作。我想在dll中使用主窗口程序调用函数“MyDllIniSys”,让dll渲染窗口每32微秒,直到主窗口程序设置“bIAutoRender”不等于1。 所以我希望函数“MyDllIniSys”启动线程,然后立即返回。 但是在我所做的事情中,程序不会工作,因为如果线程启动,它将永远不会返回。 我怎么能得到它,有人请。救命。 非常感谢
static void renderOneFrame(const boost::system::error_code& /*e*/,
boost::asio::deadline_timer* t, int* iNeedAutoRender)
{
//call Who use this DLL, let it refresh the window
if(OnRefreshEvent)
{
OnRefreshEvent();
}
if(*iNeedAutoRender == 1)
{
t->expires_at(t->expires_at() + boost::posix_time::microseconds(iIRenderMicroSenconds));
t->async_wait(boost::bind(renderOneFrame,
boost::asio::placeholders::error, t, iNeedAutoRender));
}
}
EXTERN_C MYDLLAPI INT MyDllIniSys(INT WindowWidth,INT WindowHeight)
{
COgreRenderLoader myLoader;
myLoader.IniOgre(externalWindowHandle,WindowWidth,WindowHeight);
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::microseconds(iIRenderMicroSenconds));
t.async_wait(boost::bind(renderOneFrame,
boost::asio::placeholders::error, &t,&bIAutoRender));
boost::thread thread1(boost::bind(&boost::asio::io_service::run, &io));
//io.run();
thread1.join();
//thread1.start_thread();
return 1;
}
答案 0 :(得分:0)
调用thread1.join()将阻塞,直到thread1完成执行。关闭它,你的函数将启动线程并立即返回。
即使thread1对象超出范围as you can see from this question,线程仍会继续。