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"<<endl; 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引起的暂停使得其他事件得以执行 |
|
来自: chensirDSP > 《我的图书馆》