帮忙看一下下面程序输出结果,感觉不对

magic_yong 2015-08-12 03:25:58
我是希望在a=100 的时候触发条件来激活子线程
但是结果好像不对劲,求大侠帮忙看看,谢谢

 #include <stdio.h>  
#include <windows.h>

int a =50 ;
HANDLE g_hEvent = CreateEvent(NULL, true, false, NULL);
//子线程函数1
DWORD WINAPI ThreadFun1(LPVOID pM)
{
printf("子线程1的线程ID号为:%d\n子线程\n", GetCurrentThreadId());
printf_s("还在子线程1中\n");

WaitForSingleObject(g_hEvent,INFINITE);
int b = a*a;
printf_s("b是%d\n",b);
return 0;
}
//子线程函数2
DWORD WINAPI ThreadFun2(LPVOID pM)
{
printf("子线程2的线程ID号为:%d\n子线程\n", GetCurrentThreadId());
printf_s("还在子线程2中\n");
WaitForSingleObject(g_hEvent,INFINITE);
int c = a+5;
printf_s("c是%d\n",c);
return 0;
}
//主函数,所谓主函数其实就是主线程执行的函数。
int main()
{

HANDLE handle1 = CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL);
HANDLE handle2 = CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL);

while(a<10000,a++)
{
if(a>100)
{
SetEvent(g_hEvent);
}

}
WaitForSingleObject(handle1,INFINITE);
printf_s("结束了\n");
return 0;
}
...全文
72 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2015-08-12
  • 打赏
  • 举报
回复
while(a < 10000, a++) 这是 while, 不是 for 。这个会被认为成一个逗号表达式,依次求值,返回值为最后一个子表达式(a++)的值。所以这个循环只能等到 a++ 溢出转一圈变成 0 才能推出。 不知道是不是你期望的结果。 if(a>100) { SetEvent(g_hEvent); } 这样的话,SegEvent 会执行多次,及只要 a>100 就会执行,而不是仅在 (a==100) 的时候执行一次。不知道这是不是你期望的。
yangpo 2015-08-12
  • 打赏
  • 举报
回复
你创建的手动复位信号,需要在setevent之前加resetevent

64,652

社区成员

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

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