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函数详解 **CreateEvent** 函数主要用于创建或打开一个命名的或无名的事件对象。事件对象通常用于同步线程之间的操作,例如,用于...
在"WaitForSingleObject和CEvent的结合用法示例"中,我们可能会看到以下步骤: 1. **创建事件对象**:首先,需要创建一个`CEvent`对象,这可以通过调用`CEvent`的构造函数实现。可以设置事件为自动重置或手动重置...
在新的线程中,使用WaitForSingleObject函数等待进程的结束,直到进程结束时,输出“进程已关闭”的信息。 WaitForSingleObject函数可以广泛应用于多线程编程中,例如等待线程的结束、等待互斥对象的释放、等待信号...
本演示将详细介绍`WaitForSingleObject`的使用方法以及Windows信号的概念。 `WaitForSingleObject`是Windows API中的一个函数,位于`kernel32.dll`库中,其主要作用是让当前线程进入等待状态,直到指定的对象处于...
下面通过一个具体的示例来分析`WaitForSingleObject`的使用方法及注意事项。 #### 示例分析 示例程序创建了两个线程,分别对应于`ThreadFunc1`和`ThreadFunc2`。其中,`ThreadFunc1`负责不断更新界面上的时间显示...
同时,通过结合使用高精度计时方法,可以实现复杂的定时控制逻辑,比如让线程在特定时间点执行特定任务。 总的来说,理解多线程、启动控制台和精确定时的概念,并掌握`WaitForSingleObject`的使用,对于编写高效、...
在给出的`testWaitforSingleObject`场景中,可能是一个VS2008环境下的C++程序,它通过创建事件对象,然后使用`WaitForSingleObject`和`SetEvent`进行线程间的同步操作。例如,一个线程可能负责执行特定任务并在完成...
线程同步的四种详细使用方法--临界区、互斥量、事件等 线程同步是计算机软件开发的重要技术,多线程同步技术的原理和实现对软件开发人员来说非常重要。本文对多线程的各种同步技术的原理和实现进行了初步探讨,包括...
使用WaitForSingleObject()在"mytime”命令和新创建的进程之间同步 调用GetSystemTime()来获取时间 在Linux下实现: 使用fork()/exec()来创建进程运行程序 使用wait()等待新创建的进程结束 调用gettimeofday()来获取...
在"Windows共享内存使用方法.txt"和"Windows共享内存使用方法.zip"文件中,可能包含了更具体的代码示例和详细步骤,供读者进一步学习和实践。这些文件可以帮助你深入理解并掌握Windows下的共享内存技术,以便在实际...
在Windows平台下,利用Visual C++进行串行通信的开发具有其独特的优势,本篇将详细介绍几种实现VC串口通信的方法,包括使用MSComm控件、基于Win32 API自定义通信类以及结合线程和定时器的高级通信方案,旨在提供一套...
在VC++编程环境中,多线程技术是一种常用的方法,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本学习资料专注于探讨多线程的开发,包括线程的创建、销毁、暂停和恢复,以及线程间的通信与交互。 ...
### 命名管道的用法 #### 一、理解命名管道 **1.1 管道概念** 管道(Pipe)是一种进程间通信(IPC)机制,它允许两个进程之间进行通信。创建管道的进程被称为管道服务器,而连接到管道的进程则被称为管道客户端。...
一旦`WaitForSingleObject`返回,AP就可以使用`ReadMsgQueue`读取并处理队列中的消息。 在处理消息时,AP通常需要检查消息的类型,以便知道发生了什么类型的事件。在上面的代码中,`PPOWER_BROADCAST`结构体包含了...
然后,我们可以在适当的时候调用`WaitForSingleObject`来等待线程结束,并在结束后使用`GetExitCodeThread`检查线程的退出状态。 监控线程状态的完整步骤可能如下: 1. 创建一个继承自`CWinThread`的类,重写`Run`...
在VC中,我们有两种主要的方法来实现等待一个子进程结束:一是使用`WaitForSingleObject`函数,二是利用进程的句柄通过`CreateProcess`函数来同步。 ### 1. 使用`WaitForSingleObject` `WaitForSingleObject`是...
本实验的目的是掌握进程和线程的同步及互斥机制,了解 Windows 中的同步对象和相关 API 的使用方法。实验中,我们将使用生产者消费者模型来模拟进程和线程的同步及互斥。 一、实验目的 * 掌握根本的同步与互斥算法...
C++提供了一系列机制来实现这一目标,其中临界区(Critical Section)是一种常用的方法。临界区是指一段需要被保护的代码区域,同一时间只能有一个线程执行。本文将深入探讨如何在C++中利用临界区来实现多线程间的...
- 可以自定义`TThread`子类,然后在`Execute`方法中使用互斥量和事件来确保线程安全。例如,可以在初始化时创建互斥量,在需要保护的代码块前后使用`WaitForSingleObject`和`ReleaseMutex`。 4. **示例代码片段** ...