关于线程编程的东东,有点东西不懂,求教!

yingzijuntuan 2012-09-26 05:37:22
#include <Windows.h>
#include <process.h>
#include <stdio.h>

DWORD WINAPI myThread (void * p)
{
for(int i=0;i<100;i++)
{
printf("hello , everybody!\n");
Sleep(100);
}
return 0;
}
int main()
{
HANDLE handle;
DWORD dw;
handle=CreateThread(NULL,0,myThread,NULL,0,&dw);
Sleep(100);
for(int i=0;i<10;i++)
{
printf("*******now,suspended!**********\n");
SuspendThread(handle);
for(int j=0;j<3;j++)
{
printf("Good Thank you !\n");
Sleep(100);//这个Sleep是什么用呀?
}
printf("******Now Resumed!**********\n");
ResumeThread(handle);
Sleep(100);//这个Sleep是什么用呀?
}
CloseHandle(handle);
return 0;
}

不懂上面的两个Sleep有什么用!还有,这个线程是怎么运行的呀!用函数CreateThread建了线程,打印了一个东西,然后呢?这个线程应该是一直存在的吗?新建了线程后,sleep是干啥的呀?求大神指点!
...全文
246 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingzijuntuan 2012-09-30
  • 打赏
  • 举报
回复
对了,Sleep是怎么确定那两个线程转换执行的?如果有很多个线程,那么使用Sleep后,使用权是从哪个线程转到哪个线程呀?这个怎么确定?求帮忙!!
yingzijuntuan 2012-09-30
  • 打赏
  • 举报
回复
还有,为什么子线程里面是打印100个东西,但是执行的时候只是打印了15个”hello,everybody“?还有,为什么每次打印”hello,everybody“的时候不是一样的,为什么有时候打印一个”hello。、、“有时候确实打印了2个“hello、、、、”?求解释!!!
yingzijuntuan 2012-09-30
  • 打赏
  • 举报
回复
yadon_z,还有几个疑问,麻烦给解释一下吧!求帮忙了!
1.“第一个休眠应该是等待子线程打印不然有。。。”我把第一个Sleep注释后,程序就没有执行下去了,这个是你说的阻塞吧?
2.我把子程序中的Sleep给注释掉后,程序会一下子就把子程序里面的printf给执行完。这个是你说的为了好控制吧?我迷惑的是这个程序的执行顺序是怎么样子的?为什么每次都是Sleep后才打印出来呀?
  • 打赏
  • 举报
回复
sleep让线程挂起
yadon_z 2012-09-29
  • 打赏
  • 举报
回复
貌似回复会自动消除前面的空白,流程被打断了......
yadon_z 2012-09-29
  • 打赏
  • 举报
回复
主线程 -> 创建子线程 -> 休眠100秒 ->阻塞子线程 -> 休眠300秒 -> 唤醒子线程->休眠100秒
^ |
|____________________________________|

子线程被创建 -> 打印 -> 休眠---------被阻塞---------休眠结束
^ |
|____________________________________|

主线程中第一个休眠应该是等待子线程打印不然有可能子线程还没有运行到打印就被阻塞了,
第二个纯粹是延时,挂起子线程300秒,
第三个也是等待子线程打印,不然有可能子线程还没打印出下一句就又被阻塞了。
子线程中的sleep也是纯做延时用的,不然打印太快,主线程不好控制。
用来控制打印顺序的话还是用互斥量好些。
yingzijuntuan 2012-09-29
  • 打赏
  • 举报
回复
我还是很晕呀!比如说handle=CreateThread(NULL,0,myThread,NULL,0,&dw);这一句,它是创建线程的吧?那创建完成后不会立即执行吗?我的意义是,如果没有Sleep的话,这个线程是会在哪里执行完?还有,在MyThread线程里面的for循环里面也有Sleep,这个是怎么回事?求解答!
yifuzhiming 2012-09-28
  • 打赏
  • 举报
回复
就线程停在那里等一会在继续执行
franzhong 2012-09-28
  • 打赏
  • 举报
回复
时间片概念
ouPuso 2012-09-28
  • 打赏
  • 举报
回复
sleep() 当前线程主动让出CPU,将CPU的使用权调度到其它线程或进程
冷月清晖 2012-09-28
  • 打赏
  • 举报
回复
因为过了100毫秒了呀。
yingzijuntuan 2012-09-27
  • 打赏
  • 举报
回复
但是,为什么我调试的时候发现,每次都是Sleep这个函数后才打印一行东西的呀,如果Sleep是休眠的话,那这是怎么解释?
赵4老师 2012-09-27
  • 打赏
  • 举报
回复
《30天自制操作系统》
冷月清晖 2012-09-27
  • 打赏
  • 举报
回复
sleep的意思就是“睡会”,主动放弃CPU分配给线程自己的时间片。sleep(100)就是放弃100毫秒
smart900613 2012-09-27
  • 打赏
  • 举报
回复
不用sleep 线程马上结束了,到达函数尾部
manxiSafe 2012-09-26
  • 打赏
  • 举报
回复
sleep 就是将程序从执行态切换到等待态,就是将程序挂起(主进程)。
Gloveing 2012-09-26
  • 打赏
  • 举报
回复
就是暂停线程的执行一会儿
q598162221 2012-09-26
  • 打赏
  • 举报
回复
让线程睡一会

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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