首页 文章

睡眠毫秒

提问于
浏览
519

我知道POSIX sleep(x) 函数使程序休眠x秒 . 是否有一个函数使程序在C中睡眠x毫秒?

14 回答

  • 77

    请注意,毫秒没有标准的C API,所以(在Unix上)你将不得不接受 usleep ,它接受微秒:

    #include <unistd.h>
    
    unsigned int microseconds;
    ...
    usleep(microseconds);
    
  • 0

    在C 11中,您可以使用标准库设施执行此操作:

    #include <chrono>
    #include <thread>
    
    std::this_thread::sleep_for(std::chrono::milliseconds(x));
    

    清晰可读,不再需要猜测 sleep() 函数采用的单位 .

  • 30

    为了保持便携性,您可以使用Boost::Thread进行睡眠:

    #include <boost/thread/thread.hpp>
    
    int main()
    {
        //waits 2 seconds
        boost::this_thread::sleep( boost::posix_time::seconds(1) );
        boost::this_thread::sleep( boost::posix_time::milliseconds(1000) );
    
        return 0;
    }
    

    这个答案是重复的,之前发布在this question中 . 也许你也可以找到一些有用的答案 .

  • 397

    在Unix中,您可以使用usleep .

    在Windows中有Sleep .

  • 7

    根据您的平台,您可能有 usleepnanosleep . usleep 已弃用,已从最新的POSIX标准中删除; nanosleep 是首选 .

  • 3

    为什么不使用time.h库?在Windows和POSIX系统上运行:

    #include <iostream>
    #include <time.h>
    
    using namespace std;
    
    void sleepcp(int milliseconds);
    
    void sleepcp(int milliseconds) // Cross-platform sleep function
    {
        clock_t time_end;
        time_end = clock() + milliseconds * CLOCKS_PER_SEC/1000;
        while (clock() < time_end)
        {
        }
    }
    int main()
    {
        cout << "Hi! At the count to 3, I'll die! :)" << endl;
        sleepcp(3000);
        cout << "urrrrggghhhh!" << endl;
    }
    

    更正代码 - 现在CPU保持在IDLE状态[2014.05.24]:

    #include <iostream>
    #ifdef WIN32
        #include <windows.h>
    #else
        #include <unistd.h>
    #endif // win32
    
    using namespace std;
    
    void sleepcp(int milliseconds);
    
    void sleepcp(int milliseconds) // Cross-platform sleep function
    {
        #ifdef WIN32
            Sleep(milliseconds);
        #else
            usleep(milliseconds * 1000);
        #endif // win32
    }
    int main()
    {
        cout << "Hi! At the count to 3, I'll die! :)" << endl;
        sleepcp(3000);
        cout << "urrrrggghhhh!" << endl;
    }
    
  • 1027

    nanosleep 是比 usleep 更好的选择 - 它对中断更具弹性 .

  • 10
    #include <windows.h>
    

    Syntax:

    Sleep (  __in DWORD dwMilliseconds   );
    

    Usage:

    Sleep (1000); //Sleeps for 1000 ms or 1 sec
    
  • 31

    如果使用MS Visual C 10.0,则可以使用标准库工具执行此操作:

    Concurrency::wait(milliseconds);
    

    你会需要:

    #include <concrt.h>
    
  • 18

    在C中睡眠程序的方法是 Sleep(int) 方法 . 它的头文件是 #include "windows.h."

    例如:

    #include "stdafx.h"
    #include "windows.h"
    #include "iostream"
    using namespace std;
    
    int main()
    {
        int x = 6000;
        Sleep(x);
        cout << "6 seconds have passed" << endl;
        return 0;
    }
    

    它的睡眠时间以毫秒为单位,没有限制 .

    Second = 1000 milliseconds
    Minute = 60000 milliseconds
    Hour = 3600000 milliseconds
    
  • 4

    选择调用是一种具有更高精度的方法(睡眠时间可以以纳秒为单位指定) .

  • 3

    在具有 select 功能(POSIX,Linux和Windows)的平台上,您可以执行以下操作:

    void sleep(unsigned long msec) {
        timeval delay = {msec / 1000, msec % 1000 * 1000};
        int rc = ::select(0, NULL, NULL, NULL, &delay);
        if(-1 == rc) {
            // Handle signals by continuing to sleep or return immediately.
        }
    }
    

    但是,现在有更好的替代品可供选择 .

  • 3

    使用Boost异步输入/输出线程,休眠x毫秒;

    #include <boost/thread.hpp>
    #include <boost/asio.hpp>
    
    boost::thread::sleep(boost::get_system_time() + boost::posix_time::millisec(1000));
    
  • 17

    作为POSIX系统的Win32替代品:

    void Sleep(unsigned int milliseconds) {
        usleep(milliseconds * 1000);
    }
    
    while (1) {
        printf(".");
        Sleep((unsigned int)(1000.0f/20.0f)); // 20 fps
    }
    

相关问题