我正在尝试编写一个简单的c ++函数sleep(int millisecond)
,它将使程序睡眠用户特定的毫秒。
这是我的代码:
#include <iostream>
#include <time.h>
using namespace std;
void sleep(unsigned int mseconds) {
clock_t goal = mseconds + clock();
while (goal > clock());
}
int main() {
cout << "Hello World !" << endl;
sleep(3000);
cout << "Hello World 2" << endl;
}
当我在Windows上运行此代码但在Linux上无法运行时,sleep()
函数可以正常工作。任何人都可以弄明白我的代码有什么问题吗?
答案 0 :(得分:9)
我不知道为什么每个人都在围绕你的问题跳舞而不是回答它。
你正在尝试实现你自己的类似睡眠的函数和你的实现,虽然它忙于等待而不是在内核空间中休眠(意味着处理器将“主动”运行代码来睡眠你的程序,而不是告诉机器你的程序正在睡觉,它应该运行其他代码),就好了。
问题是clock()
不需要返回毫秒。 clock()
将返回从纪元开始经过的系统时间/处理时间。该时间占用的单位取决于实施情况。
例如,在我的机器上,这就是手册页所说的内容:
说明
clock()函数确定自此以后使用的处理器时间量 调用调用进程,在一个的CLOCKS_PER_SECs中测量 第二
返回值
clock()函数返回除非出现错误所用的时间量 发生,在这种情况下返回值为-1。
另见
getrusage(2),clocks(7)
标准
clock()函数符合ISO / IEC 9899:1990(``ISO C90'')和 单一UNIX规范的版本3(“SUSv3”)需要 CLOCKS_PER_SEC定义为一百万。
从粗体部分可以看出,刻度是百万分之一秒,即微秒(不是毫秒)。要“睡眠”3秒钟,您需要拨打sleep(3000000)
而不是sleep(3000)
。
答案 1 :(得分:2)
使用C ++ 11,您可以使用sleep_for
。
#include <chrono>
#include <thread>
void sleep(unsigned int mseconds) {
std::chrono::milliseconds dura( mseconds);
std::this_thread::sleep_for( dura );
}
答案 2 :(得分:1)
你可以使用内置sleep()
函数,该函数以秒为单位,而不是毫秒,并且必须包含unistd.h
标准库,因为在此库下定义了内置sleep()
函数
试一试:
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
cout << "Hello World !" << endl;
sleep(3); //wait for 3 seconds
cout << "Hello World 2" << endl;
}
:P
答案 3 :(得分:0)
Linux上没有标准的C API(毫秒),因此您必须使用usleep
。 POSIX sleep
需要几秒钟。