Как заставить программу спать в C ++ на Win 32? - PullRequest
16 голосов
/ 12 февраля 2010

Как можно «приостановить» программу на C ++ на Win 32 и какие библиотеки необходимо включить?

Ответы [ 7 ]

26 голосов
/ 12 февраля 2010
#include <windows.h>

Sleep(number of milliseconds);

Или, если вы хотите приостановить программу во время ожидания другой программы, используйте WaitForSingleObject .

8 голосов
/ 12 февраля 2010

Если вы используете повышение, вы можете использовать функцию 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); 

В противном случае вам придется использовать API Win32:

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

И, по-видимому, C ++ 0x включает в себя:

#include <thread>
std::this_thread::sleep_for(chrono::seconds(1));
4 голосов
/ 15 января 2017

В C ++ 11 вы можете сделать это с помощью стандартных библиотечных средств:

#include <chrono>
#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(x));
1 голос
/ 21 февраля 2013

Обратите внимание, что приведенный выше код был протестирован на Code :: Blocks 12.11 и Visual Studio 2012
в Windows 7.

Для принудительного завершения или ожидания вашей программы у вас есть несколько вариантов:


  • сон (без знака 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, особенно в Code :: Bloks. И если у вас по-прежнему возникают проблемы, попробуйте добавить одну из этих библиотек в начале кода.

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

  • система ( "PAUSE")

Простая программа "Hello world" в консольном приложении Windows, вероятно, закроется, прежде чем вы сможете что-либо увидеть. Это тот случай, когда вы можете использовать систему («Пауза»).

#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;
}

пример:

#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;
}

Вы можете получить сообщение о том, что вы должны использовать _getch () вместо getch

1 голос
/ 12 февраля 2010

Если вы хотите, чтобы программа оставалась отзывчивой во время «паузы», вам нужно использовать событие таймера.

0 голосов
/ 24 февраля 2010

Не используйте функцию сна в вашем графическом интерфейсе, если она не предоставляется платформой, с которой вы работаете. Это может создать проблемы со ссылками на данные (особенно в потоке, который не является основным). Это может заморозить ваш графический интерфейс. Это не просто вопрос короткого сна, используйте waitmutexes, если вам нужно это сделать.

0 голосов
/ 12 февраля 2010

Это зависит от того, какую программу вы пишете.

Консольное приложение может просто вызвать Sleep. Приложение с графическим интерфейсом, вероятно, не хочет сделать это, так как все меню и виджеты станут нечувствительными, и приложение не будет перерисовываться в этот период. Вместо этого вам нужно сделать что-то вроде установки таймера с обратным вызовом, когда он истекает.

...