线程,Sleep

来源:百度知道 编辑:UC知道 时间:2024/05/06 16:24:44
在主线程中
proc1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
proc2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
mutex=CreateMutex(NULL,true,NULL);
cout<<"main thread run!"<<endl;
//Sleep(400);

辅助线程中:
cout<<"proc1 wait!"<<endl;
WaitForSingleObject(mutex,INFINITE);
cout<<"proc1 run!"<<endl;
ReleaseMutex(mutex);
//proc2同proc1

Sleep被注释后为什么会出现结果:
main thread run!proc1 wait!proc2 wait!
proc1 run!proc2 run! //为什么运行了?

Sleep不被注释时结果:
main thread run!proc1 wait!proc2 wait!

结果和Sleep有什么关系
主程序中,Sleep后还有
CloseHandle(mutex);
原来是程序将mutex句柄关闭后才出现的proc1 run!

那么有没有Sleep对程序执行有影响吗?为什么编程时都习惯加个Sleep?

由调试来看,没有sleep其他线程还是会运行啊?

在多线程编程时,线程间是轮流使用cpu时间片的,刚开始主线程拥有cpu时间片,如果没用sleep语句,主线程就会结束,这样其它线程就没有机会执行,所以打印的结果是main thread run,如果调用sleep语句,就让主线程睡眠,释放时间片,这样其它线程就有执行机会了。

Sleep了才可以把CPU让出来给其它线程运行的机会.