问个CreateThread的入门级问题

yitaohust 2009-08-26 11:35:11
下面的代码,为什么运行结果会是:
Hello World!
Hello World!
Thread has been created!
Press any key to continue
为什么会有2个Hello World!呢?我肯定自己是对线程的运行机制还没入门,所以请大家指教。

#include "stdafx.h"
#include "windows.h"

DWORD WINAPI Fun(LPVOID lpara)
{
printf("Thread has been created!\n");
return 0;
}

int main(int argc, char* argv[])
{
HANDLE l_hThread;
DWORD ThreadID;
l_hThread = CreateThread(NULL, 0, Fun, NULL, 0, &ThreadID);
printf("Hello World!\n");
return 0;
}
...全文
201 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪影 2009-08-27
  • 打赏
  • 举报
回复
估计是你的主线程过早退出导致代码异常。你的线程函数都没有机会运行。

你在CreateThread函数后面加上这句就好了。
WaitForSingleObject(l_hThread,INFINITE);
hacker1125 2009-08-27
  • 打赏
  • 举报
回复
没有机会运行阿,Thread has been created! 应该不会打印吧
GMingZ 2009-08-27
  • 打赏
  • 举报
回复
我刚刚把LZ的代码在VC6.0下编译执行了一遍,不会产生LZ的结果,我的结果是只输出了
个HELLO WORD, 线程函数压根没执行。所以我的电脑的情况是主线程在还没有执行新建的线程就已经结束
zhaohongbo83 2009-08-27
  • 打赏
  • 举报
回复
网络有问题!提交了2次!
zhaohongbo83 2009-08-27
  • 打赏
  • 举报
回复
上面说了解决方法
问题原因就是因为程序执行到
l_hThread = CreateThread(NULL, 0, Fun, NULL, 0, &ThreadID);
时还没有轮到形成执行,
输出缓冲区里写入Hello World! 然后执行线程
最后又轮到主线程执行导致的输出感觉有点混乱!
解决方法如LS2位的方法
zhaohongbo83 2009-08-27
  • 打赏
  • 举报
回复
上面说了解决方法
问题原因就是因为程序执行到
l_hThread = CreateThread(NULL, 0, Fun, NULL, 0, &ThreadID);
时还没有轮到形成执行,
输出缓冲区里写入Hello World! 然后执行线程
最后又轮到主线程执行导致的输出感觉有点混乱!
解决方法如LS2位的方法
Fireway2008 2009-08-27
  • 打赏
  • 举报
回复
或者,定义个bool bFlag;

把你的执行代码放入
while(bFlag == false)
循环内,当执行 Fun(LPVOID lpara)
完毕,给标志变量 bFlag = true; break; 即可。
MoXiaoRab 2009-08-27
  • 打赏
  • 举报
回复
你是VC6吧?在IDE里面编译选项设置成 “多线程”
h490516509 2009-08-27
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "windows.h"

DWORD WINAPI Fun(LPVOID lpara)
{
printf("Thread has been created!\n");
return 0;
}

int main(int argc, char* argv[])
{
HANDLE l_hThread;
DWORD ThreadID;
l_hThread = CreateThread(NULL, 0, Fun, NULL, 0, &ThreadID);
printf("Hello World!\n");
加上Sleep(100);
return 0;
}

talentjxw 2009-08-27
  • 打赏
  • 举报
回复
用个BOOL判断下FUN()执行完毕的状态.
vv1133 2009-08-27
  • 打赏
  • 举报
回复
还没执行新线程的时候,主函数已经退出了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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