如何在Win 32上用C ++“暂停”一个程序,以及必须包含哪些库?
答案 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上。
为了强制您的程序停止或等待,您有以下几种选择:
该值必须是以毫秒为单位的正整数。 这意味着如果您希望程序等待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():
可以达到相同的结果#include <iostream>
using namespace std;
int main(void)
{
cout << "Hello world!" << endl;
cin.ignore();
return 0;
}
示例:
#include <iostream>
using namespace std;
int main(void)
{
cout << "Hello world!" << endl;
cin.get();
return 0;
}
不要忘记添加库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。