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

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




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

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

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

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

 Re: Задержка в с++
Цитата:
А вопрос как мне всё таки вызвать тогда задержку?

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

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

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


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

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

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

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

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

 Re: Задержка в с++
Аватара пользователя
Unmanner

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

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

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

 Re: Задержка в с++
Аватара пользователя
Всё работает без проблем.

Цитата:
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: Задержка в с++
Аватара пользователя
Вот, спасибо :)
Просто компилятор почему-то не ругался на неизвестную ему функцию, вот я и не шерстил библиотечки..

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

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


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