那叫一个帅 发表于 2012-2-25 22:54:34

线程的问题。。纠结啊!!

#include <windows.h>
#include <stdio.h>
//#include <Thapi.h>
HANDLE hm;
int i=0;
DWORD WINAPI T(LPVOID A)
{
DWORD h=WaitForSingleObject(hm,INFINITE);
    switch(h)
{
case WAIT_OBJECT_0:printf("count..%d\n",i);break;
case WAIT_ABANDONED:printf("WAIT_ABANDONED\n");break;
case WAIT_TIMEOUT:printf("WAIT_TIMEOUT\n");break;
}
// printf("count1..%d\n",i);
i++;
/// ReleaseMutex(hm);
return 0;
}
int main()
{
hm=CreateMutex(0,0,"YY");
HANDLE handle;
for(int j=0;j<4;j++)
{
handle=CreateThread(0,0,T,0,0,0);
//Sleep(100);
}
return 0;
}
为什么结果神乎其神的,结果都不一样。。求解释啊!!

Love 梦想 发表于 2012-2-25 22:54:35

本帖最后由 Love 梦想 于 2012-2-27 10:36 编辑

回1楼的“第一:switch语句最后一句不能用break结束,而是用default结束”switch 可以这么写的。

回LZ:其实线程还没执行完毕 你的主函数已经退出了,导致线程执行了一半也被强制退出了,你在主函数的 return 0;的上面加上一句 system(“pause”);挂起代码试试就知道啦。如果结果正确的话你可以用WaitForMultipleObjects 这个函数等待线程执行完毕后再退出。或者加Sleep(100000); 延迟
注意一下WaitForSingleObject 用法哈

憔悴心只为你 发表于 2012-2-25 23:25:25

第一:switch语句最后一句不能用break结束,而是用default结束
第二:你这貌似是多线程,要用WaitForMultipleObjects函数

那叫一个帅 发表于 2012-2-25 23:37:00

憔悴心只为你 发表于 2012-2-25 23:25 static/image/common/back.gif
第一:switch语句最后一句不能用break结束,而是用default结束
第二:你这貌似是多线程,要用WaitForMulti ...

额。。不是吧!!

刺客信条 发表于 2013-6-6 16:12:06

长长见识。。。。。。。。

我是师兄 发表于 2013-6-6 17:06:22

憔悴心只为你 发表于 2012-2-25 23:25 static/image/common/back.gif
第一:switch语句最后一句不能用break结束,而是用default结束
第二:你这貌似是多线程,要用WaitForMulti ...

第一:switch语句最后一句不能用break结束,而是用default结束

没这回事 谁这么教你的
误人子弟了

2004wmj 发表于 2014-9-8 11:22:05

谢谢分享,非常喜欢!
页: [1]
查看完整版本: 线程的问题。。纠结啊!!