Mai*_*nID 2 c c++ operating-system
cout<<"abcd";
sleep(100);
cout<<'\b';
Run Code Online (Sandbox Code Playgroud)
如果我想打印出字符串然后取回一个字符,为什么这里需要sleep()?
但是当在C中使用printf时,似乎没有必要,为什么呢?
char* a = "12345";
char* b = "67890";
threadA(){cout<<a;}
threadB(){cout<<b;}
beginthread (threadA);
sleep(100);
beginthread (threadB);
Run Code Online (Sandbox Code Playgroud)
在上面的第二个伪代码中,使用sleep()是否正确?
bay*_*yda 25
计算明天的日期:
void get_tomorrow_date( struct timeval *date )
{
sleep( 86400 ); // 60 * 60 * 24
gettimeofday( date, 0 );
}
Run Code Online (Sandbox Code Playgroud)
;)
您需要了解两个微妙的问题:
- 多线程
- I/O和缓冲
我会试着给你一些想法:
多线程和睡眠
拥有一个sleep在线程环境中是有道理的.该sleep调用使您等待,从而为初始线程提供一些范围以完成其处理,即abcd在另一个线程插入退格字符之前将字符串写出到标准输出.如果您没有等待第一个线程完成其处理,那么您首先编写了退格字符,然后是字符串abcd,并且不会发现任何差异.
缓冲I/O.
I/O通常发生在缓冲,非缓冲和半缓冲状态.这可能会影响您必须等待输出显示在控制台上的时间长度(如果有的话).
您的cout实现可能使用缓冲模型.尝试添加换行符或语句endl末尾cout以打印新行并立即刷新,或使用cout << "abcd" << flush;刷新而不打印新行.
在没有睡眠第二种情况下有一个渺茫的机会,第二个线程可能会开始之前的第一个工作日,导致输出"6789012345".
但是,"休眠"并不是处理线程之间同步的方法.您通常会使用一个信号灯或类似的threadA(),其threadB()必须等待做工作之前.