麻烦高人指点一下

ptozys14 2010-09-14 11:03:58

int main()
{
DWORD threadId;
int i= 1;

hThrd = CreateThread(NULL,
0,
ThreadFunc,
(LPVOID)i,
0,
&threadId );
hThrd1 = CreateThread(NULL,
0,
ThreadFunc1,
(LPVOID)i,
0,
&threadId );

Sleep(2000);

return EXIT_SUCCESS;
}


DWORD WINAPI ThreadFunc(LPVOID n)
{
int i;
for (i=0;i<10;i++)
{
printf("xiancheng 1\n");
SuspendThread(hThrd);
ResumeThread(hThrd1);
}
return 0;
}
DWORD WINAPI ThreadFunc1(LPVOID n)
{
int i;
for (i=0;i<10;i++)
{
printf("xiancheng 2\n");
SuspendThread(hThrd1);
ResumeThread(hThrd);
}
return 0;
}

代码不全,但是,大体意思能说清楚了,
现在输出的结果是
xiangcheng 1
xiangcheng 2


然后没没有了,就两行啊,想法上应该是10行xiangcheng 1 和10行xiangcheng 2啊 。
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ptozys14 2010-09-15
  • 打赏
  • 举报
回复
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
HANDLE hEventObject;
HANDLE hEventObject1;
DWORD WINAPI ThreadFunc(LPVOID);
DWORD WINAPI ThreadFunc1(LPVOID);
HANDLE hThrd;
HANDLE hThrd1;
int main()
{
DWORD threadId;
int i= 1;

hThrd = CreateThread(NULL,
0,
ThreadFunc,
(LPVOID)i,
0,
&threadId );
hThrd1 = CreateThread(NULL,
0,
ThreadFunc1,
(LPVOID)i,
0,
&threadId );


Sleep(20000);

return EXIT_SUCCESS;
}

DWORD WINAPI ThreadFunc(LPVOID n)
{
int i;

for (i=0;i<10;i++)
{

printf("xiancheng 1\n");

Sleep(1);
ResumeThread(hThrd1);
SuspendThread(hThrd);
}
return 0;
}
DWORD WINAPI ThreadFunc1(LPVOID n)
{
int i;
for (i=0;i<10;i++)
{
printf("xiancheng 2\n");


Sleep(1);
ResumeThread(hThrd);
SuspendThread(hThrd1);


}
return 0;
}

那个sleep(1),虽然只有1毫秒,但是不加,就会卡住,
在不加sleep的时候执行结果就
xiangcheng 1
xiangcheng 2
xiangcheng 1


这三行就卡住了。
加上sleep就能全执行完。
不知道为什么?那位兄弟知道真相给说说 不甚感谢,
睡觉去了, 大家晚安!!!
dingshaofengbinbin 2010-09-15
  • 打赏
  • 举报
回复
SuspendThread(hThrd1);
ResumeThread(hThrd);
你这样写不发生死锁才怪呢!!
ptozys14 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 libinfei8848 的回复:]

没有等待线程结束,主线程一结束,其他的就跟着嗝屁了
[/Quote]
不是的
是 这两句话反了
SuspendThread(hThrd);
ResumeThread(hThrd1);
所以,ResumeThread(hThrd1)这句根本就没走到呢 就挂机了,所以 第二个现成始终就没激活。
libinfei8848 2010-09-15
  • 打赏
  • 举报
回复
没有等待线程结束,主线程一结束,其他的就跟着嗝屁了
cswuyg 2010-09-15
  • 打赏
  • 举报
回复
噢,既然你知道了,那我纯接分的。。
应该是这样子:
1、要先释放别人再把自己挂起,不然别人挂了,自己也挂了。全挂了~~
2、主线程结束了,其它线程也会结束。
赵4老师 2010-09-15
  • 打赏
  • 举报
回复
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》
ptozys14 2010-09-14
  • 打赏
  • 举报
回复
我知道了。

64,654

社区成员

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

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