帮忙看看这段代码。。谢谢了。。
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <stdio.h>
#define _SECOND 10000000 //10000000 * 100ns / 1000000000 = 1s
VOID CALLBACK TimerAPCProc( LPVOID lpArg, // Data value.
DWORD dwTimerLowValue, // Timer low value.
DWORD dwTimerHighValue ) { // Timer high value.
DWORD dwTmp = GetTickCount();
printf( "Message: %s\nValue: %d\n\n", "The system tickcount is", dwTmp );
}
void main( void ) {
HANDLE hTimer;
BOOL bSuccess;
__int64 qwDueTime;
LARGE_INTEGER liDueTime;
TCHAR szError[255];
if ( hTimer = CreateWaitableTimer( NULL, // Default security attributes.
FALSE, // Create auto-reset timer.
"MyTimer" ) )
{ // Name of waitable timer.
__try
{
// Create a negative 64-bit integer that will be used to
// signal the timer 1 seconds from now.
qwDueTime = -1 * _SECOND; //qwDurTime 100ns
// Copy the relative time into a LARGE_INTEGER.
liDueTime.LowPart = (DWORD) ( qwDueTime & 0xFFFFFFFF );
liDueTime.HighPart = (LONG) ( qwDueTime >> 32 );
bSuccess = SetWaitableTimer(hTimer, // Handle to the timer object.
&liDueTime, // When timer will become signaled.
500, // Periodic timer interval of 0.5 seconds.
//this min value is 1 ms
TimerAPCProc, // Completion routine.
NULL, // Argument to the completion routine.
FALSE ); // Do not restore a suspended system.
if ( bSuccess )
{
for (int a = 0 ; a < 10; a ++)
{
SleepEx(INFINITE, // Wait forever.
TRUE ); // IMPORTANT!!! The thread must be in an
// alertable state to process the APC.
}
}
else
{
wsprintf( szError, "SetWaitableTimer() failed with Error %d.", GetLastError() );
MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
}
}
__finally
{
CloseHandle( hTimer );
}
}
else
{
wsprintf( szError, "CreateWaitableTimer() failed with Error %d.",
GetLastError() );
MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
}
}
我要做一个定时器。我用UDP做的文件传输。所以在自己解丢包的问题,每发一个数据包就有一个确认包。当收不到确认包时。就要定时重发。经理要我做一个定时器类。这里SetWaitableTimer函数是计时的吗?为什么还要下面的那个别if判断?真的看不太明白。。帮忙。。。谢。
问题点数:50、回复次数:3Top
1 楼kingzai(stevenzhu)回复于 2004-12-01 16:07:52 得分 30
在Waitable定时器中使用异步过程调用时,您必须通过调用SleepEx(),WaitForSingleObjectEx()等方法使调用SetWaitableTimer的线程处于alertable状态以调用APC。
Q184796 HOWTO: Use a Waitable Timer with an Asynchronous Procedure Call
http://support.microsoft.com/support/kb/articles/q184/7/96.asp
Top
2 楼mixtrue(忽报人间曾伏虎,泪飞顿作倾盆雨。)回复于 2004-12-01 16:26:20 得分 10
http://community.csdn.net/Expert/topic/3567/3567490.xml?temp=9.859866E-02Top
3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-01 16:27:55 得分 10
同意楼上。
http://www.codeguru.com/Cpp/W-P/system/timers/article.php/c2837/Top




