关于QueueUserAPC的问题

zc258296293 2006-09-03 10:44:12
// test11.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <process.h>

volatile bool a = false;
HANDLE h1, h2;
HANDLE h0;
HANDLE hArr[5];

unsigned __stdcall fun( void *p )
{
int n = (int)p;


::WaitForMultipleObjects(2, hArr + (n-1), true, INFINITE);
printf("%d\n", n);


return 0;
}

VOID WINAPI WFME(ULONG_PTR dwData) {

// This function intentionally left blank
}

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hand[2];
h0 = CreateSemaphore(NULL, 1, 1, NULL);
h1 = ::CreateEvent(NULL, false, false, NULL);
h2 = ::CreateEvent(NULL, false, false, NULL);

hArr[0] = h1;
hArr[1] = h0;
hArr[2] = h2;

hand[0] = (HANDLE)_beginthreadex(NULL, 0, fun, (VOID*)1, 0, 0);
hand[1] = (HANDLE)_beginthreadex(NULL, 0, fun, (VOID*)2, 0, 0);


if (MessageBox(NULL, "fwef", "fwef", MB_YESNO) == IDYES)
::SetEvent(h1);
else
::SetEvent(h2);

::WaitForMultipleObjects(2, hand, false, INFINITE);

QueueUserAPC(WFME, hand[0], 0);
QueueUserAPC(WFME, hand[1], 0);
::WaitForMultipleObjects(2, hand, true, INFINITE);
printf("OK\n");
CloseHandle(h1);
CloseHandle(h2);
CloseHandle(hand[0]);

system("pause");
return 0;
}


我想让两个线程中的一个返回后就在线程队列中加入函数 让另一个不再等待 可是不行 为什么啊


...全文
306 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zc258296293 2006-09-10
  • 打赏
  • 举报
回复
解决了 谢谢
ahao 2006-09-03
  • 打赏
  • 举报
回复
线程里用WaitForMultipleObjectsEx等待,详细见MSDN
OOPhaisky 2006-09-03
  • 打赏
  • 举报
回复
让两个线程中的一个返回后就在线程队列中加入函数 让另一个不再等待
--------------------------------------------------------
没看明白

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧