2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Задержка в с++
Сообщение11.07.2010, 19:58 
Аватара пользователя
Работаю на с++ в НетБинс, никак не хочет работать функция sleep(3000) засыпает насовсем..

 
 
 
 Re: Задержка в с++
Сообщение11.07.2010, 21:20 
Если вы уверены, что проблема здесь - к чему вопрос? Замените для дебага пустым циклом.

 
 
 
 Re: Задержка в с++
Сообщение11.07.2010, 21:59 
Аватара пользователя
Доходя до строки Слип, программа зависает.
А вопрос как мне всё таки вызвать тогда задержку?

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 01:11 
Аватара пользователя
Пришлите исходный код примера. Обязательно отформатированный.

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 06:53 
Цитата:
А вопрос как мне всё таки вызвать тогда задержку?

Цитата:
Замените для дебага пустым циклом.

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 07:28 
Аватара пользователя
2p51x: Зачем мне пустой цикл? мне нужно нормальная программа.

Код:
while(1)
{
      cout << "..." << endl;
      sleep(3000);
}


Даже так не работает.

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 07:43 
Unmanner в сообщении #338610 писал(а):
Работаю на с++ в НетБинс, никак не хочет работать функция sleep(3000) засыпает насовсем..
А Вы уверены, что насовсем? Так прямо 50 минут ждали?

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 09:01 
Аватара пользователя
А разве в аргументе она не в Миллисекундах принимает?

тем не менее меняя 3000 на 1 ничего не меняется.

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 09:30 
Аватара пользователя
Насколько я помню, в C++ нет sleep. Есть в Си (нужно подключить unistd.h) и аргумент у неё в секундах:
Код:
$ man 3 sleep
...
SYNOPSIS
       #include <unistd.h>
       unsigned int sleep(unsigned int seconds);
...

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 10:18 
Аватара пользователя
Unmanner

Нужен весь исходник с инклудами, а так же информация об ОС и компиляторе.

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 19:59 
meduza в сообщении #338679 писал(а):
Насколько я помню, в C++ нет sleep. Есть в Си (нужно подключить unistd.h) и аргумент у неё в секундах

В gcc есть еще одна функция задержки, с аргументом в микросекундах:
Код:
void usleep(unsigned long usec);
А Sleep с аргументом в милисекундах - это из WinAPI.

 
 
 
 Re: Задержка в с++
Сообщение12.07.2010, 21:42 
Аватара пользователя
Всё работает без проблем.

Цитата:
SLEEP(3) Linux Programmer's Manual SLEEP(3)



NAME
sleep - Sleep for the specified number of seconds

SYNOPSIS
#include <unistd.h>

unsigned int sleep(unsigned int seconds);


Код:
# cat prog.cc
#include <iostream>
#include <unistd.h>

using namespace std;

int main()
{
   sleep(10);

   cout << "What's up?\n";

   return 0;
}


Цитата:
# time ./a.out
What's up?
0.000u 0.000s 0:10.00 0.0% 0+0k 0+0io 0pf+0w

 
 
 
 Re: Задержка в с++
Сообщение13.07.2010, 22:33 
Аватара пользователя
Вот, спасибо :)
Просто компилятор почему-то не ругался на неизвестную ему функцию, вот я и не шерстил библиотечки..

 
 
 
 Re: Задержка в с++
Сообщение14.07.2010, 03:06 
2Unmanner
Наверное, лучше делать примерно так (оставаясь в рамках стандарта языка):
Используется синтаксис C
#include <time.h>

void my_sleep(int Seconds)
{
    time_t Start, Current;

    time(&Start);
    while(difftime(time(&Current), Start)<=Seconds);
}
 


Также можно считать процессорные тики:
Используется синтаксис C
void my_sleep(int Seconds)
{
    clock_t Start;

    Start=clock();
    while((clock()-Start)/CLK_TCK<=Seconds);
}
 


Но это все слишком неточные методы...

 
 
 
 Re: Задержка в с++
Сообщение14.07.2010, 03:54 
И difftime(), и clock() действительно слишком неточны. Причём, если у difftime() просто дискретность - секунда, то clock() считает совсем не то, а именно процессорное время использованное именно этой программой. Оно может оказаться больше реального времени, если параллельно работают несколько потоков. К тому-же постоянная работа программы для простой задержки - слишком плохой стиль, т.к. не даёт в это время работать другим программам.
Правильнее будет использовать для точного определения времени gettimeofday(), а вместо sleep() - что нибудь менее переносимое - usleep(), nanosleep(), или, на худой конец, select().

 
 
 [ Сообщений: 19 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group