多线程问题,着急,求助

hahali 2011-11-15 10:10:35
#include <windows.h>
#include <iostream>
using namespace std;

DWORD WINAPI Fun1Proc(LPVOID lpParameter);

void main(void)
{
HANDLE hThread1;
hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
CloseHandle(hThread1);
cout << "main thread is running" << endl;

Sleep(1000);
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
cout << "thread1 is running" << endl;
return 0;
}


同样的程序在VC6里和VS2005里运行的结果不一样,这跟编译器有关吗?
在VC6里运行结果:thread1 is running main thread is running(结果里没有换行)

在VS2005里运行结果:thread1 is running
main thread is running(结果里有换行)

当把Sleep(1000);注释掉时,在VC6运行结果是:main thread is running
在VS2005里运行结果为thread1 is running main thread is running(结果里没有换行)

这是什么原因啊?
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dic_008 2011-11-15
  • 打赏
  • 举报
回复
楼主,多线程主要为了更好地利用系统资源,以及线程之间的同步和防止死锁。
某某某 2011-11-15
  • 打赏
  • 举报
回复
这个是调度上的问题。
你在VC6运行完之后,后面应该有个空行吧?
如果你去掉sleep(1000),你的线程还没运行完主程序就退出了,随即把线程关闭,所以结果只有main thread is running

你在VC6运行的时候可能正好赶上这一时刻:当线程输出thread1 is running 这个时候,还没有输出endl,主线程就运行到main thread is running,这个输出完成之后,在输出线程的endl,所以说后面应该有个空行。

你可以编译之后,直接双击那个可执行程序,连续运行多次,这个结果可能会不同。
pengzhixi 2011-11-15
  • 打赏
  • 举报
回复
而且 你这个Sleep(1000);也就等待了1秒吧。用WaitForObject吧
hastings 2011-11-15
  • 打赏
  • 举报
回复
你没做同步,输出乱码都可能的~~
pengzhixi 2011-11-15
  • 打赏
  • 举报
回复
多线程为什么要结果一样呢?而且每次运行都不一定相同。
chuxinxiaoye 2011-11-15
  • 打赏
  • 举报
回复
刚开始接触linuxC
wintree 2011-11-15
  • 打赏
  • 举报
回复
线程本来就是。。。乱跑把,,如果你不加同步的话,加锁什么的~
yuhaozx 2011-11-15
  • 打赏
  • 举报
回复
调度问题,没有做同步运行结果会不一样

64,678

社区成员

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

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