请教主线程与辅助线程哪个先执行,代码如下

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:56:14
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
void main()
{
HANDLE hThread1;
hThread1=CreatThread(NULL,0,Fun1Proc,NULL,0,NULL)
CloseHandle(hThread1);
count<<"main thread is running"<<endl;
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
count<<"thread1 is running "<<endl;
return 0;
}
可是输出结果是“main thread is running”
难道Fun1Proc没有执行?
能解释下吗
我没有分了
谢谢!

你需要wait,你启动线程之后子线程还没来得及启动主线程就退出了。

修改如下:

HANDLE hThread1;
hThread1=CreatThread(NULL,0,Fun1Proc,NULL,0,NULL)
count<<"main thread is running"<<endl;
WaitForsingleObject( hThread1, 3000 );
CloseHandle(hThread1);
}

你的程序是因为,辅助线程在没有得到时间片时候,已经在主线程中把辅助线程关闭了,所以在hThread1=CreatThread(NULL,0,Fun1Proc,NULL,0,NULL)
之后加上延时(WaitForsingleObject或Sleep),让主线程休眠,同时把时间片交给辅助线程执行

Sadusaga 说法不完全对,确切是说,并不是主线程退出了从线程就没法运行了,应该是,主线程,也就是Main函数返回之后,C/C++的运行时库直接调用了ExitProcess();,直接把进程退出了,因此从线程根本没机会执行。一般地,Windows会在所有线程都结束之后才会结束掉进程,而不是主线程退出就把进程结束了。如此主线程退出,而还有其他的从线程活着,Windows就会分配给其他线程时间片,让他们运行,而非强硬地结束进程。
你可以在Main返回之前调用ExitThread(0);来看一下,就会发现从线程运行了,这是因为主线程并没有调用ExitProcess()就退出了,因而进程会继续存在,从线程得到运行。