上网搜了下 关于 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返回失败原因之一的更多相关文章

  1. WaitForMultipleObjects返回0xffffffff

    DWORD ret; ; HANDLE handle[THREAD_NUM]; ; i < THREAD_NUM; i++) handle[i] = (HANDLE)_beginthreadex ...

  2. 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案

    将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ...

  3. php json_decode返回失败的排查

    参考网址: https://segmentfault.com/a/1190000006154011 返回失败时,通过 json_last_error可以获取其json解析失败的原因.

  4. MFC 对话框不显示,返回-1 原因

    DoModal失败原因 1.MFC 通常对话框不显示的原因有 1 父窗口HWND无效 2 在ONINITDIALOG里用了ENDDIALOG 3 无效的对话框资源ID 4 使用没有注册的的自定义控件 ...

  5. ffmpeg avformat_open_input返回失败的解决办法

    用ffmpeg做的第一个程序,参考网上的代码,就出现了一些问题,其中avformat_open_input返回失败. 下面是我在网上收集到的失败信息的相关解决: /////////////////// ...

  6. java File delete()执行失败原因(转)

    java.io.File里的delete操作很实用也很常用,可以用来删除单独的文件和某一目录.但有时候会出现delete失败的情况,出现这种情况的原因一般有以下几种:1.删除时还有其他程序在使用该文件 ...

  7. TFS Release 步骤调用命令行返回失败信息的处理方法

    TFS Release中自定义步骤时,可以选择“命令行”,官方的文档中,并没有描述调用相关的程序后,如何返回失败信息.通过下面步骤,可以实现本标题描述的功能. 步骤一:编写Console Applic ...

  8. pip install 提示代理连接失败原因及解决办法

    # pip install 提示代理连接失败原因及解决办法 1. 错误提示 在公司电脑上安装Python的虚拟环境时输入命令: pip install virtualenv 系统提示以下异常信息: R ...

  9. 单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题

    单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题 今天遇到一个问题,在主站点现在配置的应用和主站点登录会话状态不能共享,进入子站点应用 ...

随机推荐

  1. 测试数学公式latex

    \( J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! + 1)}{\left({\frac{x}{2}}\right)}^{2 m + ...

  2. 如何在网页中调用百度地图api

    我想在木有提供地图接口的年代,前端工程师门要么只写上企业的具体地址,要么就是用一张标有自己位置的地图图片.但是现在不一样啦!为了增强用户体验,谷歌,甚至百度都很开放了,你可以在他们的网站上找到地图接口 ...

  3. impress.js webslide 参数

    data-transition-duration="2000" 改变切换场景的速度,默认1000data-perspective="500" 改变透视的深度,默 ...

  4. Go语言的传值与传引用

    Go语言里的传值与传引用大致与C语言中一致,但有2个特例,map和channel默认传引用,也就是说可以直接修改传入的参数,其他的情况如果不用指针的话,传入的都是参数的副本,在函数中修改不会改变调用者 ...

  5. 应用间共享数据方法(一)---sharepreferce

    SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ...

  6. 编写可维护的JavaScript代码

    1.  1)for-in循环用来遍历对象属性.不仅遍历对象的实例属性,还遍历从原型继承来的属性. 所以最好使用hasOwnProperty()方法来过滤. 2) for in循环遍历出的对象属性不能保 ...

  7. 第二章:搭建Android开发环境

    通过对本章节内容的阅读,了解了Android底层开发所需要的各种开发工具,以及在Linux环境下怎样搭建Android底层开发环境,在Linux系统上开发Android应用程序,需要安装Linux版本 ...

  8. HDU 4691 正解后缀数组(暴力也能过)

    本来是个后缀数组,考察算法的中级题目,暴力居然也可以水过,就看你跳不跳坑了(c++和G++返回结果就很不一样,关键看编译器) 丝毫不差的代码,就看运气如何了.唯一差别c++还是G++,但正解是后缀数组 ...

  9. BackTrack5-r3安装用户组-软件中心

    所需文件包地址:http://pan.baidu.com/s/1i3ouc9v(64位更新包) 进入BT系统图形模式-将(用户组-软件中心)文件夹改名(a)并拖进BT系统图形桌面-打开BT终端输入:c ...

  10. 安装Python2.7环境

    1.下载并根据提示安装python_2.7.10_x64 2.将安装目录配置到环境变量path中 3.在命令后台中输入Python,出现下图中信息表示安装成功