Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 135, средняя оценка - 4.73
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
#1

5 СПОСОБОВ задержки времени: Что скажете? - C++

17.12.2009, 20:38. Просмотров 18220. Ответов 21

В Linux работают 100%, в Windows не проверял, но тоже должны работать.

1. используя nanosleep:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
 
 
 
using namespace std;
 
 
 
int msleep(unsigned long milisec)  
 
{  
 
    struct timespec req={0};  
 
    time_t sec=(int)(milisec/1000);  
 
    milisec=milisec-(sec*1000);  
 
    req.tv_sec=sec;  
 
    req.tv_nsec=milisec*1000000L;  
 
    while(nanosleep(&req,&req)==-1)  
 
        continue;  
 
    return 1;  
 
}  
 
 
 
int main()
 
{
 
    cout << "Testing nanosleep: waiting 5 secs\n";
 
    msleep(5000);
 
    cout << "That is it";
 
}
2. используя usleep:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
#include <time.h> 
 
 
 
using namespace std;
 
 
 
void Sleep(float s)
 
{
 
    int sec = int(s*1000000);
 
    usleep(sec);
 
}
 
 
 
int main ()
 
{
 
    cout << "Waiting 5 secs\n";
 
    Sleep(5);
 
    printf ("FIRE!!!\n");
 
  return 0;
 
}
3. используя CLOCKS_PER_SEC:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
 
#include <time.h> 
 
 
 
void wait ( int seconds )
 
{
 
  clock_t endwait;
 
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
 
  while (clock() < endwait) {}
 
}
 
 
 
int main ()
 
{
 
  int n;
 
  printf ("Starting countdown...\n");
 
  for (n=10; n>0; n--)
 
  {
 
    printf ("%d\n",n);
 
    wait (1);
 
  }
 
  printf ("FIRE!!!\n");
 
  return 0;
 
}
4. используя sleep:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
#include <time.h>
 
 
 
using namespace std;
 
 
 
int main()
 
{
 
    cout << "SomeAction\n";
 
    cout << endl;
 
    sleep(1);               // seconds
 
    cout << "NextAction\n";
 
    return 0;
 
}
5. используя sleep:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
#include <time.h>
 
 
 
using namespace std;
 
 
 
int main()
 
{
 
    cout << "SomeAction\n";
 
    cout.flush();
 
    sleep(1);               // seconds
 
    cout << "NextAction\n";
 
    return 0;
 
}
Собственно вопрос: как вы считаете, все ли они акуратны и какой из них самый предпочтительный (в плане точности)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
18.12.2009, 01:24     5 СПОСОБОВ задержки времени: Что скажете? #2
первый более-менее. но работать будет только в линуксе.
но я бы не использовал ни один из них. либо select(), либо интервальные/асинхронные таймеры.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
18.12.2009, 05:04     5 СПОСОБОВ задержки времени: Что скажете? #3
6й способ.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
 
void alarm_handler(int signo)
{
    printf("Boom!\n");
    exit(0);
}
 
int main(void)
{
    time_t t = 0;
 
    signal(SIGALRM, alarm_handler);
    alarm(5);
    printf("Bomb has been planted.\n");
    while(1) {
        printf("%ld...\n", ++t);
        sleep(1);
    }
    return 0;
}
atomicxp
0 / 0 / 0
Регистрация: 02.05.2009
Сообщений: 3
18.12.2009, 09:46     5 СПОСОБОВ задержки времени: Что скажете? #4
А как насчёт потери процессорного времени в циклах...
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 16:16     5 СПОСОБОВ задержки времени: Что скажете? #5
не, народ это же полная ж*** зачем прогружать проц?
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
18.12.2009, 16:50     5 СПОСОБОВ задержки времени: Что скажете? #6
Где вы нашли прогрузку процессора? Разве что только в 3м варианте, где clock() гоняется в цикле.
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 16:58     5 СПОСОБОВ задержки времени: Что скажете? #7
sleep(1); - из стандартной библиотеки?
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
18.12.2009, 16:59     5 СПОСОБОВ задержки времени: Что скажете? #8
Код
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);

DESCRIPTION
       sleep()  makes  the  calling  process  sleep until seconds seconds have
       elapsed or a signal arrives which is not ignored.

RETURN VALUE
       Zero if the requested time has elapsed, or the number of  seconds  left
       to sleep, if the call was interrupted by a signal handler.

CONFORMING TO
       POSIX.1-2001.
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 17:09     5 СПОСОБОВ задержки времени: Что скажете? #9
Цитата Сообщение от niXman Посмотреть сообщение
но я бы не использовал ни один из них. либо select(), либо интервальные/асинхронные таймеры
можете более подробно о них рассказать, хотябы дать ссылку...

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <map>
#include <unistd.h>
 
using namespace std;
 
main()
{
    string s;
    map <string, int> M;
    while (cin >> s)
        ++M[s];
    for (map <string, int> :: iterator it = M.begin(); it != M.end(); ++it)
        if (it->second == 2) cout << it->first << endl;
    sleep(1);
    return 0;
}
а почему тогда вышеприведенный код на винде не идет?

Добавлено через 21 секунду
16 C:\Documents and Settings\Администратор\Рабочий стол\help.cpp `sleep' was not declared in this scope

Добавлено через 6 минут
дайте, пожалуйста ссылку на ваш "Linux Programmer's Manual"
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
18.12.2009, 17:55  [ТС]     5 СПОСОБОВ задержки времени: Что скажете? #10
>> outoftime

Если ошибка только в том, что sleep не объявлен, то это исправить очень просто -
добавьте библиотеки.

#include <dos.h>
#include <stdio.h>
#include <conio.h>

Есть еще вариант

include <Windows.h>
и далее Sleep(ms);
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 18:16     5 СПОСОБОВ задержки времени: Что скажете? #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <map>
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <unistd.h>
#include <windows.h>
 
using namespace std;
 
main()
{
    string s;
    map <string, int> M;
    while (cin >> s)
        ++M[s];
    for (map <string, int> :: iterator it = M.begin(); it != M.end(); ++it)
        if (it->second == 2) cout << it->first << endl;
    sleep(1);
    return 0;
}
20 C:\Documents and Settings\Администратор\Рабочий стол\help.cpp `sleep' was not declared in this scope

Добавлено через 1 минуту
sleep(1); на Sleep(1); надо было заменить..
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
18.12.2009, 18:17     5 СПОСОБОВ задержки времени: Что скажете? #12
unistd.h - это стандартная _юниксовая_ библиотека, есесно в винде сие не будет работать.
В виндовсе есть аналог Sleep, но аргументом принимает число милисекунд (а не секунд как sleep).
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 18:56     5 СПОСОБОВ задержки времени: Что скажете? #13
Gravity, спасибо, но я это догнал сам, когда ошибку перестало выбивать но окно сразу закрылось)) у меня большая практика в паскале, хотя и в прошлом)) с багами вроде как на ты)) кстати, можете все-таки подогнать ссылку на вашу цытату? буду весьма благодарен..
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
18.12.2009, 19:16     5 СПОСОБОВ задержки времени: Что скажете? #14
outoftime, http://www.opennet.ru/man.shtml
Вобще man-страницы это встроенная справка любой unix-системы, их не ищут в инете)
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 19:56     5 СПОСОБОВ задержки времени: Что скажете? #15
жаль.. у меня был убунту и винда на одном винте, так через 1 месяц винт накрылся, может быть проблема, в том что они несовместимы?
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
18.12.2009, 20:23     5 СПОСОБОВ задержки времени: Что скажете? #16
outoftime, вы хоть поняли что написали?
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 21:55     5 СПОСОБОВ задержки времени: Что скажете? #17
да по сути маразм, но мне как-то смутно верится, либо єто злое совпадение, (убунту - это ос декспотовская, типа виндовс от линукса)
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
18.12.2009, 21:59     5 СПОСОБОВ задержки времени: Что скажете? #18
Цитата Сообщение от outoftime Посмотреть сообщение
убунту - это ос декспотовская, типа виндовс от линукса
никому этого не говорите
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
18.12.2009, 22:38     5 СПОСОБОВ задержки времени: Что скажете? #19
не ну я норм написал, понятно ведь все, а в том что это совпадение я уже разобрался..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2011, 11:12     5 СПОСОБОВ задержки времени: Что скажете?
Еще ссылки по теме:
как заделать так что бы значения переменной менялось по заданному времени C++
Задержки клавиатуры Windows C++
C++ Реализация трехсекундной задержки
C++ нет задержки экрана
Кратковременные задержки на разных профессорах C++ Linux

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
14.05.2011, 11:12     5 СПОСОБОВ задержки времени: Что скажете? #20
Цитата Сообщение от outoftime Посмотреть сообщение
да по сути маразм, но мне как-то смутно верится, либо єто злое совпадение, (убунту - это ос декспотовская, типа виндовс от линукса)

Вы знаете что-то чего не знаем мы? )))))
Yandex
Объявления
14.05.2011, 11:12     5 СПОСОБОВ задержки времени: Что скажете?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru