你如何让程序在Win 32上用C ++睡眠?

时间:2010-02-12 14:22:09

标签: c++ sleep

如何在Win 32上用C ++“暂停”一个程序,以及必须包含哪些库?

7 个答案:

答案 0 :(得分:25)

#include <windows.h>

Sleep(number of milliseconds);

或者,如果您想在等待其他节目时暂停节目,请使用WaitForSingleObject

答案 1 :(得分:8)

如果您使用的是boost,则可以使用thread::sleep功能:

#include <boost/thread/thread.hpp>
boost::system_time time = boost::get_system_time();
time += boost::posix_time::seconds(1);
boost::thread::sleep(time); 

否则,您将不得不使用win32 api:

#include <windows.h>
Sleep(1000);

显然,C ++ 0x包括:

#include <thread>
std::this_thread::sleep_for(chrono::seconds(1));

答案 2 :(得分:4)

在C ++ 11中,您可以使用标准库工具执行此操作:

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

答案 3 :(得分:1)

如果您希望程序在“暂停”时保持响应,则需要使用计时器事件。

答案 4 :(得分:1)

请注意,上面的代码在Code :: Blocks 12.11和Visual Studio 2012上进行了测试 在Windows 7上。

为了强制您的程序停止或等待,您有以下几种选择:


  • sleep(unsigned int)

该值必须是以毫秒为单位的正整数。 这意味着如果您希望程序等待2秒钟,请输入2000.

以下是一个例子:

#include <iostream>     //for using cout
#include <stdlib.h>     //for using the function sleep

using namespace std;    //for using cout

int main(void)         
{
   cout << "test" << endl;
   sleep(5000);         //make the programme waiting for 5 secondes
   cout << "test" << endl;
   sleep(2000);         // wait for 2 secondes before closing

   return 0;
}

如果你等了太久,这可能意味着参数是秒。所以改变它:

sleep(5);

对于那些使用sleep获取错误消息或问题的人,请尝试使用_sleep或Sleep替换它,特别是在Code :: Bloks上。 如果你仍然遇到问题,请尝试在代码的大问题上添加一个这个库。

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <dos.h>
#include <windows.h>

  • 系统( “暂停”)

Windows控制台应用程序上的一个简单的“Hello world”程序可能会在您看到任何内容之前关闭。那种你可以使用系统的情况(“暂停”)。

#include <iostream>    

using namespace std;   

int main(void)         
{
    cout << "Hello world!" << endl;

    system("PAUSE");

    return 0;
}

如果收到消息“错误:'系统'未在此范围内声明”,只需添加即可 在代码的大角度中的以下行:

#include <cstdlib>

  • cin.ignore()

使用cin.ignore():

可以达到相同的结果
#include <iostream>     

using namespace std;    

int main(void)         
{
    cout << "Hello world!" << endl;

    cin.ignore();

    return 0;
}

  • cin.get()

示例:

#include <iostream>     

using namespace std;    

int main(void)         
{
    cout << "Hello world!" << endl;

    cin.get();

    return 0;
}

  • 的getch()

不要忘记添加库conio.h:

#include <iostream>     
#include <conio.h>    //for using the function getch()

using namespace std;    

int main(void)
{

    cout << "Hello world!" << endl;

    getch();

    return 0;
}

您可以让消息告诉您使用getget

的_getch()

答案 5 :(得分:0)

这取决于您所编写的程序类型。

控制台应用可以调用Sleep。 GUI应用程序可能想要执行此操作,因为所有菜单和小部件都将不敏感,并且应用程序在此期间不会重绘自身。相反,你需要做一些事情,比如设置一个带有回调的计时器到期时。

答案 6 :(得分:0)

如果您使用的框架没有提供睡眠功能,请不要在GUI中使用睡眠功能。这可能会为数据创建引用问题(特别是在不是主线程的线程中)。这可能会冻结你的GUI。它不仅仅是一个短暂睡眠的问题,如果你需要那么就使用waitmutexes。