初学线程的一个小问题! - 奥博IT资讯

来源:百度文库 编辑:神马文学网 时间:2024/04/29 23:42:25

void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CloseHandle(hThread1);
Sleep(10);//
}

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

不加Sleep(10).         运行结果:空.
加上Sleep(10)后        运行结果:thread1 is running


书中说:
Sleep(10)让主线程暂停运行10秒,使其放弃执行的权利,操作系统就选择线程1执行;
当该线程1运行完成后或者10ms间隔时间已经过去,  主线程就恢复运行,main()函数退出.

问题:
当该线程1运行完成后,或者10ms间隔时间已经过去, 主线程就恢复运行,main()函数退出.

//我觉得这两句有问题?
单单线程1运行完成后,主线程并不是立即就恢复运行,得等10ms后主线程恢复运行,main()函数退出

应该为:

1:线程1在主线程的等待的10ms时间内已经结束. 则:得等10ms后恢复运行,main()函数退出.
2:线程1在主线程的等待的10ms时间内没结束,则:在主线程的10ms后,主线程最先被CPU执行的时候,main()函数退出.
各位我理解的对吗?

问题2:
我把Sleep(10),改为Sleep(0);按理说,不等待,等待时间为0,与不加Sleep(0)时一样,可结果还是先执行Thread 1.


----------------------------------------------------------------------

主线程退出的时候会强制结束子线程。但是实际上无法保证主线程在Sleep10秒之后立即就能运行。

Sleep(0)是有特殊意义的,虽然线程并不休眠,但是会交出时间片,由系统调配下一个等待线程运行。

搂主可以参考下 Windows核心编程

--------------------------------------------------------

Sleep之后线程就已经暂停了(就是交出时间片)
参数只是暂停多长时间


--------------------------------------------------------

每条sleep()语句最少会消耗时间大概(20~50ms),根据系统状况不同可能有所不一样
就向上面几位说的,因为sleep引起的暂停使得其他事件得以执行