读书人

时间控制有关问题

发布时间: 2012-04-05 12:42:40 作者: rapoo

时间控制问题。
我用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() 的执行速度有多快呢?
如果太快,等待信号的线程来不及处理就会丢失。

读书人网 >C++

热点推荐