我的问题描述如下:
我的程序使用了2个线程,主线程使用辅线程的数据进行计算。具体代码如下:辅线程的RUN函数:
int CAssistanceThread::Run() 
{
// TODO: Add your specialized code here and/or call the base class
while(true)
{
//等待定时器的事件
WaitForSingleObject(m_hevtTimer,INFINITE);
                  //等待关闭线程事件
if(WaitForSingleObject(m_hevtClosed,0)==WAIT_OBJECT_0)
break; //等待主线程请求事件
WaitForSingleObject(m_hevtRequest,INFINITE);
ResetEvent(m_hevtRequest);
    
//数据库状态标志
if(m_bDatabaseStatus)
{
//如果读取失败,设置数据库状态
if(!m_pDas->Select())
m_bDatabaseStatus=false;
} //发送信息通知主线程可以使用数据
PostMessage(m_hWnd,WM_HANDLEDATA,0,0);
} //设置关闭应答事件
SetEvent(m_hevtClosedAnswer); return 0;
}主线程:
文档类//处理数据
void CEvaluationSystemDoc::HandleData()
{
         //验证数据库状态
if(!CheckServerStatus())
{
                  //设置请求事件
SetEvent(m_pAssistThread->m_hevtRequest);
return;
} GetSystemTime(&m_BeginTime);
}bool CEvaluationSystemDoc::CheckServerStatus()
{
bool bReturn=true; //辅线程数据库状态
if(!m_pAssistThread->m_bDatabaseStatus)
{
bReturn=false;
                  //连接数据库
if(m_DatabaseDialog.ConnectDasServer())
{
m_Das.SetupSession(m_DatabaseDialog.m_DasDataSource);
bDasServerStatus=true;
m_pAssistThread->m_bDatabaseStatus=true;
}
}return bReturn;
}视图类:LRESULT CEvaluationSystemView::OnHandleData(WPARAM wParam,LPARAM lParam)
{
CEvaluationSystemDoc* pDocument=GetDocument();
pDocument->HandleData();
return 0;
}我使用OLE DB 访问数据库,完成目的:数据库中断,程序仍正常运行。
经测试:发现,如果网络中断,程序正常,但是,如果网络没有中断,只是丢包严重,程序处于死机状态,请求各位高手,这是为什么?希望提供解决方案