CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

帮忙看看这段代码。。谢谢了。。

楼主gxh2004(gxhgxh)2004-12-01 15:53:12 在 VC/MFC / 进程/线程/DLL 提问

#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

相关问题

  • 这段代码错在哪?
  • 这段代码那错了?
  • 看一下这段代码!
  • 这段代码行么??
  • 请看这一段代码!
  • 看看这段代码`~~
  • 这段代码有错么?
  • 看看这段代码?
  • 请看这段代码?
  • 看看这段代码

关键词

  • liduetime
  • qwduetime
  • htimer
  • timer
  • bsuccess
  • seconds
  • dword
  • integer

得分解答快速导航

  • 帖主:gxh2004
  • kingzai
  • mixtrue
  • DentistryDoctor

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo