快要崩溃了,100分这个有关问题,是小弟我的程序结构不对还是什么原因呢?搞了很长时间了.

快要崩溃了,100分求助这个问题,是我的程序结构不对还是什么原因呢?搞了很长时间了...
程序大概的流程是这样的:

//------CFilterDlg.h

class   CFilterDlg   :   public   CDialog
{

public:
//--------线程1------//
static   UINT   SimulinkThread(void   *param);//计算
CWinThread   *pWorkSimulinkThread;

//--------线程2-------//
static   UINT   IntCheckThread(void   *param);//查询
CWinThread   *pCheckThread;
......
}

//--------CFilterDlg.cpp

CEvent   gPulseEvent; //全局变量,初始无信号,自动事件
int   Simuflags=1;                       //判断SimulinkThread内部计算操作是否执行完
int   SimuOK_Number=0; //线程pWorkSimulinkThread中计算正常完成的次数
int   SimuERROR_Number=0; //线程pWorkSimulinkThread中计算未完成,丢弃获取到的脉冲的次数

void   CFilterDlg::OnStartCheck()  
{
//创建线程
pCheckThread=AfxBeginThread(IntCheckThread,this,THREAD_PRIORITY_HIGHEST);
pWorkSimulinkThread=AfxBeginThread(SimulinkThread,this,THREAD_PRIORITY_ABOVE_NORMAL);

}

//-------轮询线程函数体-------//
UINT   CFilterDlg::IntCheckThread(void   *param)
{
      CFilterDlg   *dlg=(CFilterDlg   *)   param;  
      dlg-> GetParent();    

      while(1) //不停的查询
      {
               
            if   (外部脉冲频率有输入)   //外部输入频率为500Hz,即2ms获取一次脉冲
              {

if(1==Simuflags)   //////问题所在
{

      ++SimuOK_Number;
      gPulseEvent.SetEvent(); //使事件有效
}
else   if(0==Simuflags)   //////问题所在
{
      SimuERROR_Number++; //计算未结束,丢弃此次频率输入,继续下次查询
}
            }

      }

      return   0;
}


//---------线程2函数体------------//
UINT   CFilterDlg::SimulinkThread(void   *param)
{
CFilterDlg   *dlgDatasend=(CFilterDlg   *)   param;
dlgDatasend-> GetParent();

while(1)
{
WaitForSingleObject(gPulseEvent.m_hObject,0); //自动ResetEvent
Simuflags=0; //开始计算
... //计算过程,此过程约耗0.8ms左右时间
Simuflags=1; //计算结束
}
  return   0;
}

出现的问题是SimuOK_Number的个数为2000多时,SimuERROR_Number的次数就已经有200多了,也就是说SimulinkThread函数体里面的计算部分未能执行完成。这个郁闷了,我的计算过程只有0.8ms左右,外部的脉冲间隔是2ms左右,怎么会来不及处理呢?
是不是我的程序结构设计的不多呢?
我以前是这样做的:(没有用到事件类,每次获取到脉冲后就重新创建线程,频繁的开关线程比较耗资源,所以想用事件类,但这样反而出现了上述那个问题)

//------CFilterDlg.h

class   CFilterDlg   :   public   CDialog
{

public:
//--------线程1------//
static   UINT   SimulinkThread(void   *param);//计算
CWinThread   *pWorkSimulinkThread;

//--------线程2-------//
static   UINT   IntCheckThread(void   *param);//查询
CWinThread   *pCheckThread;
......
}

//------CFilterDlg.cpp

int   Simuflags=1;                       //判断SimulinkThread内部计算操作是否执行完
int   SimuOK_Number=0; //线程pWorkSimulinkThread中计算正常完成的次数
int   SimuERROR_Number=0; //线程pWorkSimulinkThread中计算未完成,丢弃获取到的脉冲的次数

void   CFilterDlg::OnStartCheck()  
{
pCheckThread=AfxBeginThread(IntCheckThread,this,THREAD_PRIORITY_TIME_CRITICAL);

}
//-------轮询线程函数体-------//