WaitForMultipleObjects函数存在一个固定的有效值为1~64,所以在上一篇(http://xiabin1235910-qq-com.iteye.com/admin/blogs/1968778)文章中,当线程数大于64时,会出现不稳定现象,如下:(此时线程数为70)
如果在输出的语句之前,加上一个sleep(500)语句,则会正常,代码如下:
#include <windows.h> #include <process.h> #include <iostream> using namespace std; const int THREADNUM = 70; volatile long number = 0; unsigned int __stdcall threadFunc(PVOID pM) { Sleep(100); InterlockedIncrement(&number); Sleep(50); return 0; } int main() { int num = 20; HANDLE handle[THREADNUM]; while(num--) { number = 0; for(int i=0; i< THREADNUM; i++) { handle[i] = (HANDLE)_beginthreadex(NULL, 0, threadFunc, NULL, 0, NULL); } WaitForMultipleObjects(THREADNUM, handle, TRUE ,INFINITE); Sleep(500); cout << "计数个数为" << number << endl; } getchar(); return 0; }
输出结果为:
所以,保险起见,在使用WaitForMultipleObjects函数时,还是要把线程数控制在64以下。
若线程数大于64,则需要考虑用别的方法。
相关推荐
采用多线程技术,使用CreateThread WaitForMultipleObjects函数等,实现了5个人赛跑比赛的模拟,并统计比赛结果。是一个比较好的多线程的演示。
多线程比赛WaitForMultipleObjects()函数的应用.rar
该程序利用WaitForMultipleObjects函数实现了线程的安全退出。
分析: 司机停车,通知售票员开门,售票员关门,通知司机开车 使用到的函数和信号量 HANDLE mutex; HANDLE empty; HANDLE full; 创建信号量 HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES ...
易语言API定义源码,API定义,DefWindowProc,CreateRemoteThread,MsgWaitForMultipleObjects,RectVisible,mciSendStringA,Sleep,SHFormatDrive,ChooseColorA,LocalSize_色盒,LocalSize_EXCEPTION_POINTERS,...
实现不同线程独立完成自己的任务,每个线程的任务都是向文件写入指定的字符
线程函数必须返回一个值,它将成为该线程的退出代码。使用CreateThread()函数创建线程,用WaitForMultipleObject()函数管理线程来监测多个对象。采用SetEvent来设置事件处理线程间的同步问题。 伪代码如下: DWORD ...
线程函数必须返回一个值,它将成为该线程的退出代码。使用CreateThread()函数创建线程,用WaitForMultipleObject()函数管理线程来监测多个对象。采用SetEvent来设置事件处理线程间的同步问题。 伪代码如下: DWORD ...
WaitForMultipleObjects()主进程等待线程的结束等函数进行设计。 2.在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex) 。 使用这些对象都分为三个步骤,一是创建或者初始化; 接着请求该同步对象,...
WaitForSingleObject与WaitForMultipleObjects 多线程测试。
通过互斥量、事件来解决生产者和消费者的问题,主要涉及的内容有多线程的创建,事件的创建,互斥量的创建,线程的同步。主要的函数有:CreateThread,CreateEvent,CreateMutex,WaitForMultipleObjects等。
使用到的函数和信号量 HANDLE mutex; HANDLE empty; HANDLE full; 创建信号量 HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是信号量的安全属性 可...
使用到的函数和信号量 HANDLE mutex; HANDLE empty; HANDLE full; 创建信号量 HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是信号量的安全属性 可...
易语言注册表监视源码,CreateEvent,RegOpenKeyEx,RegCloseKey,CloseHandle,RegNotifyChangeKeyValue,WaitForSingleObject,WaitForMultipleObjects
WaitForMultipleObjects()主进程等待线程的结束等函数进行设计。 2.在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex) 。 使用这些对象都分为三个步骤,一是创建或者初始化; 接着请求该同步对象,...
先上一些多线程需要使用的函数定义: 代码如下:DWORD WINAPI ProcessClientRequests(LPVOID lpParam) //新线程将会执行的函数定义{ return 0;...WaitForMultipleObjects(MAXCLIENTS, threads, TRUE, INFINITE); //
该库使用的函数WaitForMultipleObjects最多只能等待MAXIMUM_WAIT_OBJECTS句柄*,并且不参与线程池/ APC,就其建模协作式多任务处理而言,后者可能是一个优点-没有控制机制来控制对共享的访问例如,需要资源。...
易语言金盾护航源码,金盾护航,消息框,系统修复,系统设置,系统优化,CreateEvent,RegOpenKeyEx,RegCloseKey,CloseHandle,RegNotifyChangeKeyValue,WaitForSingleObject,WaitForMultipleObjects,MessageBox
改成与CPU个数有关的话,又和WaitForMultipleObjects冲突,不知道如何处理这个数组 5.如何接收新用户连接? 接收了连接后就要投递更足够的AcceptEx操作,当用完一个就再增加投入,这样可以无限制的接收用户。 实现...