zoukankan      html  css  js  c++  java
  • windows笔记等待定时器与用户定时器的区别

    等待定时器(SetWaitableTimer)与用户定时器(SetTimer)它们之间的最大差别是,用户定时器需要在应用程序中设置许多附加的用户界面结构,这使定时器变得资源更加密集。

    等待定时器属于内核对象,这意味着它们可以供多个线程共享,并且是安全的。

    用户定时器能够生成WM_TIMER消息,这些消息将返回给调用SetTimer(用于回调定时器)的线程和创建窗口(用于基于窗口的定时器)的线程。因此,当用户定时器报时的时候,只有一个线程得到通知。

    多个线程可以在等待定时器上进行等待,如果定时器是个人工重置的定时器,则可以调度若干个线程。

    如果要执行与用户界面相关的事件,以便对定时器作出响应,那么使用用户定时器来组织代码结构可能更加容易些,因为使用等待定时器时,线程必须既要等待各种消息,又要等待内核对象(如果要改变代码的结构,可以使用MsgaitForMultipleObjects函数)。

    等待定时器,当到了规定时间的时候,更有可能得到通知。WM_TIMER消息始终属于最低优先级的消息,当线程的队列中没有其他消息时,才检索该消息。等待定时器的处理方法与其他内核对象没有什么差别,如果定时器发出报时信息,而你的线程正在等待之中,那么你的线程就会醒来。

    用户定时器SetTimer

    UINT_PTR SetTimer(
    HWND hWnd,
    // 窗口句柄
    UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
    UINT uElapse,               // 时间间隔,单位为毫秒
    TIMERPROC lpTimerFunc // 回调函数
    );

    第一种用法 :(vs2008代码下载

    第一个参数hWnd设为NULL,第四个参数设为TimerProc函数指针。

    第二种用法 :(vs2008代码下载

    第一个参数hWnd不为NULL,第四个参数设为TimerProc设置为空。

    本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/09/05/1818307.html

  • 相关阅读:
    表单传文件值读取不到
    tomacat启动慢
    finder文件目录跳转快捷键
    ziparchiver添加后编译出错
    mjrefresh源码分析
    Code Sign error: No unexpired provisioning profiles found that contain any of the keychain's signing certificates
    java web学习
    Java HashMap
    Java Convert String to Binary
    Java ArrayList Class
  • 原文地址:https://www.cnblogs.com/fangyukuan/p/1818307.html
Copyright © 2011-2022 走看看