2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Задержка в с++
Сообщение11.07.2010, 19:58 
Аватара пользователя


07/07/10
100
Нижний Новгород
Работаю на с++ в НетБинс, никак не хочет работать функция sleep(3000) засыпает насовсем..

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение11.07.2010, 21:20 


06/04/09
156
Воронеж
Если вы уверены, что проблема здесь - к чему вопрос? Замените для дебага пустым циклом.

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение11.07.2010, 21:59 
Аватара пользователя


07/07/10
100
Нижний Новгород
Доходя до строки Слип, программа зависает.
А вопрос как мне всё таки вызвать тогда задержку?

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


01/04/10
910
Пришлите исходный код примера. Обязательно отформатированный.

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение12.07.2010, 06:53 


06/04/09
156
Воронеж
Цитата:
А вопрос как мне всё таки вызвать тогда задержку?

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

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение12.07.2010, 07:28 
Аватара пользователя


07/07/10
100
Нижний Новгород
2p51x: Зачем мне пустой цикл? мне нужно нормальная программа.

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


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

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение12.07.2010, 07:43 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение12.07.2010, 09:01 
Аватара пользователя


07/07/10
100
Нижний Новгород
А разве в аргументе она не в Миллисекундах принимает?

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

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение12.07.2010, 09:30 
Заслуженный участник
Аватара пользователя


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

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


01/04/10
910
Unmanner

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

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение12.07.2010, 19:59 
Заслуженный участник


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

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

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


01/04/10
910
Всё работает без проблем.

Цитата:
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 
Аватара пользователя


07/07/10
100
Нижний Новгород
Вот, спасибо :)
Просто компилятор почему-то не ругался на неизвестную ему функцию, вот я и не шерстил библиотечки..

 Профиль  
                  
 
 Re: Задержка в с++
Сообщение14.07.2010, 03:06 
Заслуженный участник


26/07/09
1559
Алматы
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 
Заслуженный участник


04/05/09
4587
И difftime(), и clock() действительно слишком неточны. Причём, если у difftime() просто дискретность - секунда, то clock() считает совсем не то, а именно процессорное время использованное именно этой программой. Оно может оказаться больше реального времени, если параллельно работают несколько потоков. К тому-же постоянная работа программы для простой задержки - слишком плохой стиль, т.к. не даёт в это время работать другим программам.
Правильнее будет использовать для точного определения времени gettimeofday(), а вместо sleep() - что нибудь менее переносимое - usleep(), nanosleep(), или, на худой конец, select().

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group