MFC WaitForMultipleObjects 函数

2024-02-09 12:48

本文主要是介绍MFC WaitForMultipleObjects 函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WaitForMultipleObjects 函数

  • Syntax
  • Parameters
  • Return Value
  • Remarks

Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses.
【等待,直到一个或所有指定的对象处于信号状态或超时间隔结束。】

To enter an alertable wait state, use the WaitForMultipleObjectsEx function.
【要进入可报警的等待状态,请使用WaitForMultipleObjectsEx函数。】

Syntax

DWORD WINAPI WaitForMultipleObjects(__in  DWORD nCount,__in  const HANDLE* lpHandles,__in  BOOL bWaitAll,__in  DWORD dwMilliseconds
);\

Parameters

nCountThe number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.
lpHandles指向的数组中的对象句柄数。对象句柄的最大数目是MAXIMUM_WAIT_OBJECTS。
lpHandlesAn array of object handles. For a list of the object types whose handles can be specified, see the following Remarks section. The array can contain handles to objects of different types. It may not contain multiple copies of the same handle.
【对象句柄数组。有关可以指定其句柄的对象类型的列表,请参见下面的备注部分。数组可以包含不同类型对象的句柄。它不能包含同一句柄的多个副本。】
If one of these handles is closed while the wait is still pending, the function’s behavior is undefined.
【如果其中一个句柄在等待仍挂起时关闭,则函数的行为未定义。】
The handles must have the SYNCHRONIZE access right. For more information, see Standard Access Rights.
【句柄必须具有同步访问权限。有关详细信息,请参阅标准访问权限。】
bWaitAllIf this parameter is TRUE, the function returns when the state of all objects in the lpHandles array is signaled. If FALSE, the function returns when the state of any one of the objects is set to signaled. In the latter case, the return value indicates the object whose state caused the function to return.
【如果此参数为TRUE,则当lpHandles数组中所有对象的状态都被通知时,函数返回。如果为FALSE,则当任何一个对象的状态设置为signaled时,函数返回。在后一种情况下,返回值指示其状态导致函数返回的对象。】
dwMillisecondsThe time-out interval, in milliseconds. The function returns if the interval elapses, even if the conditions specified by the bWaitAll parameter are not met. If dwMilliseconds is zero, the function tests the states of the specified objects and returns immediately. If dwMilliseconds is INFINITE, the function’s time-out interval never elapses.
【超时间隔,以毫秒为单位。如果间隔已过,则函数返回,即使bWaitAll参数指定的条件未满足也是如此。如果dwMilliseconds为零,则函数将测试指定对象的状态并立即返回。如果dwMilliseconds是无限的,则函数的超时时间间隔永远不会过去。】

Return Value

If the function succeeds, the return value indicates the event that caused the function to return. It can be one of the following values. (Note that WAIT_OBJECT_0 is defined as 0 and WAIT_ABANDONED_0 is defined as 0x00000080L.)
【如果函数成功,则返回值指示导致函数返回的事件。它可以是以下值之一。(请注意,WAIT_OBJECT_0定义为0,WAIT_ABANDONED_0定义为0x00000080L。)】

Return code/valueDescription
WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount– 1)If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled.
【如果bWaitAll为TRUE,则返回值指示所有指定对象的状态都被通知。】
If bWaitAll is FALSE, the return value minus WAIT_OBJECT_0 indicates the lpHandles array index of the object that satisfied the wait. If more than one object became signaled during the call, this is the array index of the signaled object with the smallest index value of all the signaled objects.
【如果bWaitAll为FALSE,则返回值减去WAIT_OBJECT_0 表示满足等待的对象的lpHandles数组索引。如果在调用期间有多个对象发出信号,则这是所有发出信号的对象中具有最小索引值的发出信号的对象的数组索引。】
WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCount– 1)If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled and at least one of the objects is an abandoned mutex object.
【如果bWaitAll为TRUE,则返回值表示所有指定对象的状态都有信号,并且至少有一个对象是放弃的互斥对象。】
If bWaitAll is FALSE, the return value minus WAIT_ABANDONED_0 indicates the lpHandles array index of an abandoned mutex object that satisfied the wait. Ownership of the mutex object is granted to the calling thread, and the mutex is set to nonsignaled.
【如果bWaitAll为FALSE,则返回值减去WAIT_ABANDONED_0 表示满足等待的废弃互斥对象的lpHandles数组索引。互斥对象的所有权被授予调用线程,互斥被设置为nonsignaled。】
If a mutex was protecting persistent state information, you should check it for consistency.
【如果互斥体正在保护持久状态信息,则应检查其一致性。】
WAIT_TIMEOUT
0x00000102L
The time-out interval elapsed and the conditions specified by the bWaitAll parameter are not satisfied.
【超时间隔已过,bWaitAll参数指定的条件不满足。】

If the function fails, the return value is WAIT_FAILED ((DWORD)0xFFFFFFFF). To get extended error information, call GetLastError.
【如果函数失败,则返回值为WAIT_FAILED ((DWORD)0xFFFFFFFF)。要获取扩展错误信息,请调用GetLastError。】

Remarks

The WaitForMultipleObjects function determines whether the wait criteria have been met. If the criteria have not been met, the calling thread enters the wait state until the conditions of the wait criteria have been met or the time-out interval elapses.
【WaitForMultipleObjects函数确定是否满足等待条件。如果未满足条件,则调用线程将进入等待状态,直到满足等待条件或超时间隔结束。】

When bWaitAll is TRUE, the function’s wait operation is completed only when the states of all objects have been set to signaled. The function does not modify the states of the specified objects until the states of all objects have been set to signaled. For example, a mutex can be signaled, but the thread does not get ownership until the states of the other objects are also set to signaled. In the meantime, some other thread may get ownership of the mutex, thereby setting its state to nonsignaled.
【当bWaitAll为TRUE时,只有当所有对象的状态都设置为signaled时,函数的等待操作才完成。函数不会修改指定对象的状态,直到所有对象的状态都设置为signaled。例如,可以向互斥体发送信号,但是线程在其他对象的状态也设置为signaled之前不会获得所有权。同时,其他线程可能会获得互斥锁的所有权,从而将其状态设置为nonsignaled。】

When bWaitAll is FALSE, this function checks the handles in the array in order starting with index 0, until one of the objects is signaled. If multiple objects become signaled, the function returns the index of the first handle in the array whose object was signaled.
【当bWaitAll为FALSE时,此函数将按从索引0开始的顺序检查数组中的句柄,直到向其中一个对象被设置为signaled为止。如果多个对象被设置为signaled,函数将返回数组中第一个句柄的索引,该句柄的对象已被设置为signaled。】

The function modifies the state of some types of synchronization objects. Modification occurs only for the object or objects whose signaled state caused the function to return. For example, the count of a semaphore object is decreased by one. For more information, see the documentation for the individual synchronization objects.
【此函数用于修改某些类型的同步对象的状态。仅对其信号状态导致函数返回的一个或多个对象进行修改。例如,信号量对象的计数减少1。有关详细信息,请参阅各个同步对象的文档。】

To wait on more than MAXIMUM_WAIT_OBJECTS handles, use one of the following methods:
【要等待超过MAXIMUM_WAIT_OBJECTS个对象句柄,请使用以下方法之一:】
1.Create a thread to wait on MAXIMUM_WAIT_OBJECTS handles, then wait on that thread plus the other handles. Use this technique to break the handles into groups of MAXIMUM_WAIT_OBJECTS.
【创建一个线程以等待MAXIMUM_WAIT_OBJECTS个对象句柄,然后等待该线程和其他句柄。使用此技术可以将句柄分成MAXIMUM_WAIT_OBJECTS对象组。】
2.Call RegisterWaitForSingleObject to wait on each handle. A wait thread from the thread pool waits on MAXIMUM_WAIT_OBJECTS registered objects and assigns a worker thread after the object is signaled or the time-out interval expires.
【调用RegisterWaitForSingleObject等待每个句柄。线程池中的等待线程等待已注册对象的MAXIMUM_WAIT_OBJECTS个对象,并在对象发出信号或超时间隔过期后分配工作线程。】

The WaitForMultipleObjects function can specify handles of any of the following object types in the lpHandles array:
【WaitForMultipleObjects函数可以在lpHandles数组中指定以下任何对象类型的句柄:】

Change notification 【更改通知】
Console input 【控制台输入】
Event 【事件】
Memory resource notification 【内存资源通知】
Mutex 【互斥】
Process 【进程】
Semaphore 【信号量】
Thread 【线程】
Waitable timer 【等待计时器】
Use caution when calling the wait functions and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. A thread that uses a wait function with no time-out interval may cause the system to become deadlocked. Two examples of code that indirectly creates windows are DDE and the CoInitialize function. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than WaitForMultipleObjects.
【在调用直接或间接创建窗口的等待函数和代码时要小心。如果线程创建任何窗口,它必须处理消息。消息广播发送到系统中的所有窗口。使用无超时间隔的等待函数的线程可能会导致系统死锁。间接创建窗口的两个代码示例是DDE和CoInitialize函数。因此,如果有创建窗口的线程,请使用MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx,而不是WaitForMultipleObjects。】

这篇关于MFC WaitForMultipleObjects 函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694271

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

JavaSE(十三)——函数式编程(Lambda表达式、方法引用、Stream流)

函数式编程 函数式编程 是 Java 8 引入的一个重要特性,它允许开发者以函数作为一等公民(first-class citizens)的方式编程,即函数可以作为参数传递给其他函数,也可以作为返回值。 这极大地提高了代码的可读性、可维护性和复用性。函数式编程的核心概念包括高阶函数、Lambda 表达式、函数式接口、流(Streams)和 Optional 类等。 函数式编程的核心是Lambda

PHP APC缓存函数使用教程

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。(Linux APC扩展安装) 系统缓存 它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量C

PHP7扩展开发之函数方式使用lib库

前言 首先说下什么是lib库。lib库就是一个提供特定功能的一个文件。可以把它看成是PHP的一个文件,这个文件提供一些函数方法。只是这个lib库是用c或者c++写的。 使用lib库的场景。一些软件已经提供了lib库,我们就没必要再重复实现一次。如,原先的mysql扩展,就是使用mysql官方的lib库进行的封装。 在本文,我们将建立一个简单的lib库,并在扩展中进行封装调用。 代码 基础