WaitForMultipleObjects返回失败原因之一
上网搜了下 关于 WaitForMultipleObjects等待多个线程退出的状态失败的情况,也有人遇到类似的情况。
一次项目中我也遇到这么个情况。项目中创建线程都是用的 _beginthread。WaitForSingleObject去等待 到没事,
但是,用 WaitForMultipleObjects去等待 _beginthread所创建的线程时,就遇到了问题,返回不成功。
后来把 创建线程的函数改为CreateThread,再调用WaitForMultipleObjects去等待 就能成功了。
原因未知,如果知道的大神们,望留言,学习学习。
测试代码如下:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdio.h>
#include <windows.h>
#include <process.h>
void th_1(void* pararm)
{
printf("TH_1\n");
}
DWORD WINAPI th_cr1(LPVOID lpThreadParameter)
{
printf("TH_1\n");
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hArr[10] = { 0 };
int nCount = sizeof(hArr) / sizeof(HANDLE);
for (int i = 0; i < nCount; i++)
{
hArr[i] = (HANDLE)_beginthread(th_1, 0, NULL);
}
Sleep(1000);
DWORD dw = WaitForMultipleObjects(nCount, hArr, TRUE, INFINITE);
//HANDLE hArr[10] = { 0 };
//int nCount = sizeof(hArr) / sizeof(HANDLE);
//for (int i = 0; i < nCount; i++)
//{
// hArr[i] = CreateThread(NULL, 0, th_cr1,NULL,1,NULL);
//}
//DWORD dw = WaitForMultipleObjects(nCount, hArr, TRUE, INFINITE);
//HANDLE* hArr = new HANDLE[10];
//hArr[0] = (HANDLE)9;
//for (int i = 1; i < 10; i++)
//{
// hArr[i] = CreateThread(NULL, 0, th_cr1, NULL, 1, NULL);
//}
//HANDLE* ph = hArr;
//DWORD dw = WaitForMultipleObjects((int)hArr[0], ph+1, TRUE, INFINITE);
//HANDLE hArr[11] = { 0 };
//int nCount = sizeof(hArr) / sizeof(HANDLE);
//hArr[0] = (HANDLE)10;
//for (int i = 1; i < nCount; i++)
//{
// hArr[i] = (HANDLE)_beginthread(th_1, 0, NULL);
//}
//HANDLE* ptemp = hArr + 1;
//DWORD dw = WaitForMultipleObjects(10, ptemp, TRUE, INFINITE);
//Sleep(1000);
return 0;
}
WaitForMultipleObjects返回失败原因之一的更多相关文章
- WaitForMultipleObjects返回0xffffffff
DWORD ret; ; HANDLE handle[THREAD_NUM]; ; i < THREAD_NUM; i++) handle[i] = (HANDLE)_beginthreadex ...
- 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ...
- php json_decode返回失败的排查
参考网址: https://segmentfault.com/a/1190000006154011 返回失败时,通过 json_last_error可以获取其json解析失败的原因.
- MFC 对话框不显示,返回-1 原因
DoModal失败原因 1.MFC 通常对话框不显示的原因有 1 父窗口HWND无效 2 在ONINITDIALOG里用了ENDDIALOG 3 无效的对话框资源ID 4 使用没有注册的的自定义控件 ...
- ffmpeg avformat_open_input返回失败的解决办法
用ffmpeg做的第一个程序,参考网上的代码,就出现了一些问题,其中avformat_open_input返回失败. 下面是我在网上收集到的失败信息的相关解决: /////////////////// ...
- java File delete()执行失败原因(转)
java.io.File里的delete操作很实用也很常用,可以用来删除单独的文件和某一目录.但有时候会出现delete失败的情况,出现这种情况的原因一般有以下几种:1.删除时还有其他程序在使用该文件 ...
- TFS Release 步骤调用命令行返回失败信息的处理方法
TFS Release中自定义步骤时,可以选择“命令行”,官方的文档中,并没有描述调用相关的程序后,如何返回失败信息.通过下面步骤,可以实现本标题描述的功能. 步骤一:编写Console Applic ...
- pip install 提示代理连接失败原因及解决办法
# pip install 提示代理连接失败原因及解决办法 1. 错误提示 在公司电脑上安装Python的虚拟环境时输入命令: pip install virtualenv 系统提示以下异常信息: R ...
- 单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题
单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题 今天遇到一个问题,在主站点现在配置的应用和主站点登录会话状态不能共享,进入子站点应用 ...
随机推荐
- ssh无密钥登陆的简单配置
主要目的是把本地的公钥放到远端被登陆的host上. 本地操作: # ssh-keygen # ssh-copy-id user@host 远端sshd_config配置: RSAAuthenticat ...
- windows下python Tkinner环境布置(包含PIL环境安装)
布置步骤:1.安装python 2.7.11 安装步骤:由于网上存在有相关经验,所以在此引用一下 http://jingyan.baidu.com/article/0bc808fc42dfab1bd4 ...
- How to use a 32bit Oracle11_g client in 64 win system and not conflict with sqldeveloper 64 bit tool
At the path:C:\app\USER_NAME\product\11.2.0\client_1\sqldeveloper\sqldeveloper\bin, there a file 'sq ...
- SQL Server中cursor的使用步骤
参考文章: http://www.cnblogs.com/knowledgesea/p/3699851.html http://www.cnblogs.com/moss_tan_jun/archive ...
- 颜色代码表#FFFFFF #FF0000 #00FF00 #FF00FF (2015-07-21 10:39)转载
▼标签: 颜色代码表 白色 ffffff 红色 ff0000 黑色 000000 it 分类: hht1 白色 #FFFFFF 2 红色 #FF0000 3 绿色 #00FF00 4 蓝色 # ...
- 如何通过JDBC访问数据库
Java数据库连接(JDBC)用与在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口,java.sql包中包含了JDBC操作数据库 ...
- SparkMLlib之 logistic regression源码分析
最近在研究机器学习,使用的工具是spark,本文是针对spar最新的源码Spark1.6.0的MLlib中的logistic regression, linear regression进行源码分析,其 ...
- 最后一次PSP
PSP: 一.计划 完成这个任务需要五天左右. 二.开发 1.需求分析: 作为一个排球比赛的现场工作人员,我需要统计每一名球员的得分以及技术统计(如:发球,拦网,一传等等),以便于颁发每场比赛的MVP ...
- STL库中的正态分布函数
在设计抽奖一类程序中,有时会需要一种概率“有较大可能获得一个普通结果,有较小可能获得一个糟糕或极好的结果”,这就可以用正态分布函数来获得这样一个结果. STL中已经提供了一系列随机分布的函数,包括正态 ...
- Metronic学习之路
简介 1.Metronic 是一个基于 Bootstrap 3.* 设计的自适应.多用途的管理后台模板. 2.HTML页面开头都有着下面一段代码来检测 ie 浏览器的版本,并根据不同版本应用特定的类到 ...