`

WaitForSingleObject的用法

    博客分类:
  • IOCP
阅读更多
WaitForSingleObject的用法(2006-10-7 12:35:00)

【收藏】 【评论】 【打印】 【关闭】

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就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到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执行一次,当设置事件为有信号状态时,线程就执行完毕了。
分享到:
评论

相关推荐

    线程中CreateEvent和SetEvent及WaitForSingleObject的用法

    线程中CreateEvent和SetEvent及WaitForSingleObject的用法

    [Delphi]多线程编程(9)认识等待函数WaitForSingleObject[归类].pdf

    [Delphi]多线程编程(9)认识等待函数WaitForSingleObject[归类].pdf

    WaitForSingleObject和CEvent的结合用法示例

    WaitForSingleObject和CEvent的结合用法示例 VC6控制台工程 多线程控制

    WaitForSingleObject演示、Window信号用法演示

    WaitForSingleObject演示、Window信号用法演示

    windows进程控制mttime

    使用WaitForSingleObject()在"mytime”命令和新创建的进程之间同步 调用GetSystemTime()来获取时间 在Linux下实现: 使用fork()/exec()来创建进程运行程序 使用wait()等待新创建的进程结束 调用gettimeofday()来获取...

    testObserverCommand.rar

    本程序描述了MFC线程运行状态监控的方法。主要介绍了WaitForSingleObject的使用、GetExitCodeThread的使用

    mytime.zip_windows myti

    &#8226 使用WaitForSingleObject()在“mytime”命令和新创建的进程之间同步 &#8226 调用GetSystemTime()来获取时间 在Linux下实现: &#8226 使用fork()/execv()来创建进程运行程序 &#8226 使用wait()等待新创建的...

    操作系统实验,进程控制

    • 使用WaitForSingleObject()在“mytime”命令和新创建的进程之间同步 • 调用GetSystemTime()来获取时间 在Linux下实现: • 使用fork()/execv()来创建进程运行程序 • 使用wait()等待新创建的进程结束 • 调用...

    操作系统实训报告

    (简要说明使用EOS的信号量解决生产者-消费者问题的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪、测试与思考等) EOS使用CreateThread函数创建线程,使用CreateMutex、CreateSemaphore 创建...

    自己学mfc时 遇到的几个问题记录

    OpenMutex为现有的一个已命名互斥体对象创建一个新句柄 2 CStringT::ReverseFind 2 OnInitDialog() 3 ZeroMemory() 3 IMPLEMENT_DYNAMIC 4 SetDlgItemText 4 BROWSEINFO 5 ...WaitForSingleObject 15

    在同步代码结束后,使用ReleaseMutex(THandle

    注意除WaitForSingleObject()函数外,你还可以使用WaitForMultipleObject()和MsgWaitForMultipleObject()函数,它们可以等待几个对象变为发信号状态。这两个函数的详细情况请看Win32 API联机文档。 4、在同步...

    操作系统课程设计(生产者-消费者,存储管理,虚拟存储器

    WaitForSingleObject()执行P操作; ReleaseSemaphore()执行V操作; WaitForMultipleObjects()主进程等待线程的结束等函数进行设计。 2.在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex) 。 使用...

    DLL注入实例+教程

    远程注入DLL方法有很多种,也是很多木马病毒所使用的隐藏进程的方法,因为通过程序加载的DLL在进程管理器是没有显示的.这里介绍一种用 CreateRemoteThread 远程建立线程的方式注入DLL. 首先,我们要提升自己的...

    语音识别的MATLAB实现

    使用WaitForSingleObject将录音过程设置为一旦开始就不中止(除非中止线程)。在此线程中做如下两个工作:将数据送入buffer,并将数据传入某个参数(其调用一个函数,将buffer中的数据送入该函数的参数*pt),而这些...

    补丁模块(带源码)InlinePatch,Hook,内存DLL注入等等

    注:计算方法使用的是LDX32 .参数 进程ID, 整数型, , 进程ID .参数 地址, 整数型, , 指令地址,如Hex2Dec("00401000") .子程序 取寄存器值, 文本型, 公开, 适用于明码读码,运行到地址处读真码;如 取寄存器值...

Global site tag (gtag.js) - Google Analytics