zoukankan      html  css  js  c++  java
  • 『转』WaitForSingleObject的用法

    转自:http://blog.pfan.cn/embed/19089.html

    WaitForSingleObject的用法                     

    WaitForSingleObject的用法

    DWORD WaitForSingleObject(

      HANDLE hHandle,

      DWORD dwMilliseconds

    );

    参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT

    hHandle可以是下列对象的句柄:

        Change notification 
    Console input 
    Event 
    Job 
    Memory resource notification 
    Mutex 
    Process 
    Semaphore 
    Thread 
    Waitable timer

    WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMillisecondsINFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。在这里举个例子:

    先创建一个全局Event对象g_event:

        CEvent g_event;

    在程序中可以通过调用CEvent::SetEvent设置事件为有信号状态。

    下面是一个线程函数MyThreadPro()

    UINT CFlushDlg::MyThreadProc( LPVOID pParam )

    {

         WaitForSingleObject(g_event,INFINITE);

         For(;;)

            {

             ………….

            }

         return 0;

    }

    在这个线程函数中只有设置g_event为有信号状态时才执行下面的for循环,因为g_event是全局变量,所以我们可以在别的线程中通过g_event. SetEvent控制这个线程。

    还有一种用法就是我们可以通过WaitForSingleObject函数来间隔的执行一个线程函数的函数体

         UINT CFlushDlg::MyThreadProc( LPVOID pParam )

    {

         while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)

         {

             ………………

         }

         return 0;

    }

    在这个线程函数中可以可以通过设置MT_INTERVAL来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了。 

  • 相关阅读:
    2020.10.23 19级training 补题报告
    2020.10.17 天梯赛练习 补题报告
    2020.10.16 19级training 补题报告
    2020.10.9 19级training 补题报告
    2020.10.10 天梯赛练习 补题报告
    2020.10.3 天梯赛练习 补题报告
    2020.10.2 19级training 补题报告
    第十届山东省ACM省赛复现补题报告
    VVDI Key Tool Plus Adds VW Passat 2015 Key via OBD
    Xhorse VVDI Prog Software V5.0.3 Adds Many MCUs
  • 原文地址:https://www.cnblogs.com/abinxm/p/1664855.html
Copyright © 2011-2022 走看看