after 부분은 내 프로그램이지만 예상대로 작동하지 않습니다. 나는 메인 윈도우 프로그램 호출 함수 "MyDllIniSys"를 dll에두고 dll은 메인 윈도우 프로그램이 "bIAutoRender"를 1로 설정하지 않을 때까지 32 마이크로 초당 윈도우를 렌더링하게한다. 그래서 함수 "MyDllIniSys"가 스레드를 시작하기를 바란다. , 한 번에 돌아 오십시오. 하지만 내가 한 일에 프로그램이 작동하지 않습니다. 스레드가 시작되면 결코 되돌아 오지 않습니다. 나는 그것을 얻을 수있는 방법, 누군가 pls. 도움. thread1 실행이 완료 될 때까지 많은 감사어떻게 백그라운드에서 dll에서 muti boost 스레드를 사용할 수 있습니까?
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;
}