我编写的是一套大型应用系统的服务器端。为了给众多客户端提供实时的服务,系统的基本结构是一个主界面,一个线程池,众多工作线程。本来在银行运行了一段时间了,都是正常的。前几天,我对程序进行升级,要加上几个监控的功能,问题就出来了。一个功能是在主界面线程中一个timer中循环检测另一个外部程序的运行状态,第二个功能是做实时数据备份,由在线程池线程中用AfxBeginThread()启动的三个线程实现。问题就来了,如果单独用其中的一个功能,就不会有问题。如果两个同时用的话,程序就会在第一个功能中发生阻塞,具体就是在timer循环中执行 FindWindow()函数是阻塞了。这到底是怎么会是?请高手解答!!!
如果不是FindWindow的问题,那么就是timer循环的问题,换用查找进程的方法吧。
SetTimer(2,5000,NULL);
//// else if(nIDEvent==2)
{
if(FindWindow(NULL,"检测.....")==NULL)
{
m_nRestartTimes++;
if(m_nRestartTimes==3)
{
WinExec("DetectServer.exe",SW_HIDE);
m_nRestartTimes=0;
}
}
}
////
线程部分:
AfxBeginThread(BackUpToAccess,this,THREAD_PRIORITY_BELOW_NORMAL);
AfxBeginThread(BackUpToSQLServer,this,THREAD_PRIORITY_BELOW_NORMAL);
AfxBeginThread(CheckSQLServerConn,this,THREAD_PRIORITY_BELOW_NORMAL);就是上面两部分冲突
waitsingleobject的方法
会成功,可是几次以后还是被阻塞了
SetTimer(2,5000,NULL);
//// else if(nIDEvent==2)
{
if(FindWindow(NULL,"检测.....")==NULL)
{
m_nRestartTimes++;
if(m_nRestartTimes==3)
{
WinExec("DetectServer.exe",SW_HIDE);
m_nRestartTimes=0;
}
}
}
////
线程部分:
AfxBeginThread(BackUpToAccess,this,THREAD_PRIORITY_BELOW_NORMAL);
AfxBeginThread(BackUpToSQLServer,this,THREAD_PRIORITY_BELOW_NORMAL);
AfxBeginThread(CheckSQLServerConn,this,THREAD_PRIORITY_BELOW_NORMAL);就是上面两部分冲突