难!难!数据库中断问题

qhdjiayuan 2004-11-19 05:55:07
我的问题描述如下:
我的程序使用了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 访问数据库,完成目的:数据库中断,程序仍正常运行。
经测试:发现,如果网络中断,程序正常,但是,如果网络没有中断,只是丢包严重,程序处于死机状态,请求各位高手,这是为什么?希望提供解决方案
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhdjiayuan 2004-11-22
  • 打赏
  • 举报
回复
定时器只是计时,在辅线程中,只有定时器有信号时,辅线程才可以继续执行
sealand1981 2004-11-22
  • 打赏
  • 举报
回复
定时器中的处理是怎样的?
wxshzf 2004-11-22
  • 打赏
  • 举报
回复
up
qhdjiayuan 2004-11-22
  • 打赏
  • 举报
回复
up

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧