[英]C++ function runs in windows perfectly but not linux?
我正在尝试编写一个简单的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()
函数可以正常工作。 任何人都能弄明白我的代码有什么问题吗?
我不知道为什么每个人都在围绕你的问题跳舞而不是回答它。
您正在尝试实现自己的类似睡眠的功能和实现,同时它忙于等待而不是在内核空间中休眠(这意味着处理器将“主动”运行代码来睡眠您的程序,而不是告诉机器您的程序正在睡觉,它应该运行其他代码),就好了。
问题是clock()
不需要返回毫秒。 clock()
将返回从纪元开始经过的系统时间/处理时间。 该时间占用的单位取决于实施情况。
例如,在我的机器上,这是手册页所说的内容:
描述
clock()函数确定自调用调用进程以来使用的处理器时间量,以一秒钟的CLOCKS_PER_SEC为单位进行测量。
返回值
clock()函数返回使用的时间量,除非发生错误,在这种情况下返回值为-1。
也可以看看
getrusage(2),时钟(7)
标准
clock()函数符合ISO / IEC 9899:1990(``ISO C90'')和单UNIX规范的版本3(``SUSv3'') ,它要求将CLOCKS_PER_SEC定义为一百万 。
从粗体部分可以看出,刻度是百万分之一秒,即微秒(不是毫秒)。 要“睡眠”3秒钟,你需要打电话给你的sleep(3000000)
而不是sleep(3000)
。
使用C ++ 11,您可以使用sleep_for
。
#include <chrono>
#include <thread>
void sleep(unsigned int mseconds) {
std::chrono::milliseconds dura( mseconds);
std::this_thread::sleep_for( dura );
}
你可以使用内置的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
Linux上没有标准的C API(毫秒),所以你必须使用usleep
。 POSIX sleep
需要几秒钟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.