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

do this 10 second's - C++

Восстановить пароль Регистрация
 
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
29.09.2011, 17:23     do this 10 second's #1
вобщем сабж. Имеется некоторая функция foo. Хочется, чтобы она выполнялась 10 секунд:
C++
1
int timer = 10 //секунд; while(timer){ foo() }
Как попроще реализовать?

Добавлено через 1 минуту
редактирование не работает. Имелось ввиду:
C++
1
2
int timer = 10 //секунд; 
while(timer){ foo() }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.09.2011, 17:30     do this 10 second's #2
Ну примерно также, только эту функцию в отдельный поток вынести.
Хотя без потока проще =\ Просто в цикле сравниваете текущее время с начальным, если разница больше 10 - выходить из цикла.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.09.2011, 17:32     do this 10 second's #3
::Sleep(10000); до или после или в функции поставь.
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
29.09.2011, 17:45  [ТС]     do this 10 second's #4
Deviaphan, плохо. мне не нужно ожидание в течении 10 секунд, мне нужно выполнение в течении 10 секунд.
diagon, вы имеете ввиду что-то вроде
/* ... */
beginthread ( foo );
sleep(10);
endthread ( foo );
/* ... */

??
хотелось бы получить код не привязанный к платформе. (буста нет, увы).

сейчас сделано с использованием time.h, однако в каждой итерации идет вызов time(NULL) для проверки. Поскольку foo совсем крохотная боюсь получить погрешность под 50%
-=ЮрА=-
Заблокирован
Автор FAQ
29.09.2011, 17:46     do this 10 second's #5
Лови, программа ровно через каждую секунду будет выдавать сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <time.h>
 
int main()
{
    printf("Enter wait-time : ");
    long end;scanf("%u",&end);
    long bgn = time(NULL);
    long sec = 1;
    double dif;
    while((dif = difftime(time(NULL),bgn)) <= end)
    {
        if(sec <= dif)
            printf("wait-time is : %u seconds\r\n",(sec++));
    }
    return 0;
}
Enter wait-time : 10
wait-time is : 1 seconds
wait-time is : 2 seconds
wait-time is : 3 seconds
wait-time is : 4 seconds
wait-time is : 5 seconds
wait-time is : 6 seconds
wait-time is : 7 seconds
wait-time is : 8 seconds
wait-time is : 9 seconds
wait-time is : 10 seconds
Press any key to continue
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.09.2011, 17:49     do this 10 second's #6
Насколько я понял, внутри функции цикл. Сделай в цикле проверку времени с момента входа в функцию и выходи через 10 секунд. Если в функции не цикл, то только через поток с грубым его убийством.
-=ЮрА=-
Заблокирован
Автор FAQ
29.09.2011, 17:51     do this 10 second's #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
:Sleep(10000); до или после или в функции поставь.
Цитата Сообщение от Vladimir. Посмотреть сообщение
beginthread ( foo );
sleep(10);
endthread ( foo );
- это неоправданная сложность, смотри мой пост тикает каждую секунду
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
29.09.2011, 17:52  [ТС]     do this 10 second's #8
всем спасибо.

решено.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.09.2011, 17:53     do this 10 second's #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
то неоправданная сложность
Ничего, что у тебя цикл съедает всё процессорное время, в то время как Sleep позволяет работать прочим программам?
Да и ТС уже сказал, что эти варианты не подходят.
-=ЮрА=-
Заблокирован
Автор FAQ
29.09.2011, 17:56     do this 10 second's #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ничего, что у тебя цикл съедает всё процессорное время
- думаю та погорячился, программа почти не напрягает проц, а вот садить на thread-нить что-нибудь простое думаю не лучший вариант...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.09.2011, 18:00     do this 10 second's #11
10 секунд простое не считают.)

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
программа почти не напрягает проц
Может и for( ; ; ) ; проц не напрягает?

Добавлено через 1 минуту

Не по теме:

Срочно закройте тему, пока опять не нафлудил кто-то.

Nameless One
29.09.2011, 18:24     do this 10 second's
  #12
 Комментарий модератора 
Тема закрыта как решенная
Yandex
Объявления
29.09.2011, 18:24     do this 10 second's
Закрытая тема Создать тему
Опции темы

Текущее время: 07:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru