首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

时间控制有关问题

2012-04-05 
时间控制问题。我用timeSetevent来定时间设置一个event为信号状态。在另一个线程中去等待这个信号。但我在等

时间控制问题。
我用timeSetevent来定时间设置一个event为信号状态。 在另一个线程中去等待这个信号。但我在等待信号的线程中的计数总是小于等于设置event的次数。请指教我该怎么控制让这两个次数相同。

void CMulitTimeTestDlg::OnStart() 
{
UpdateData( TRUE );
m_dwEventID = timeSetEvent(m_dwTimeStamp, m_dwSolution, timerfunction,
(DWORD)this, TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
m_dwTimeStart = timeGetTime();
m_ThreadInfo.hHandle = CreateThread(NULL, 0, ThreadFunction, this, CREATE_SUSPENDED, &m_ThreadInfo.dwThreadID );
  SetThreadPriority( m_ThreadInfo.hHandle, THREAD_PRIORITY_TIME_CRITICAL);
  ResumeThread( m_ThreadInfo.hHandle );
}

char* pSourse = new char[1024*1024*4];
char* pDest = new char[1024*1024*4];
DWORD g_dwcount = 0;
void CMulitTimeTestDlg::TimerFunction()
{
g_dwcount++;
SetEvent( m_hEvent );
}


DWORD CMulitTimeTestDlg::ThreadFunc()
{
while ( m_ThreadInfo.dwThreadID )
{
if (WAIT_OBJECT_0 == WaitForSingleObject( m_hEvent, 5/*INFINITE*/ ) )
  {
  ResetEvent( m_hEvent );
  m_dwCount++;
  CopyMemory(pSourse, pDest, 1024*1024);// 模拟需要作的工作
  this->UpdateData( FALSE );
  TRACE("%d\n", g_dwcount );
  if ( g_dwcount % (m_dwTimeLength*1000/5) == 0 )
  {
  CString strTemp;
  strTemp.Format( _T("[%d][%d]tc[%d]"), timeGetTime() - m_dwTimeStart,
  m_dwCount, g_dwcount );
  // 从新计时
  m_dwTimeStart = timeGetTime();
  m_dwCount = 0;
  g_dwcount = 0;
   
  m_List.AddString( strTemp );
  }
  }
}
return 0;
}

[解决办法]
TimerFunction() 的执行速度有多快呢?
如果太快,等待信号的线程来不及处理就会丢失。

热点排行