Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнение цикла while в течении 5 сек 
:(
    Опции темы
kb64
Дата 12.9.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



Помогите реализовать, спасибо.
PM MAIL   Вверх
zim22
Дата 12.9.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Sleep


--------------------
PM MAIL   Вверх
kb64
Дата 12.9.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



дык слип вроде остановит цикл ?
А мне нужно чтобы скажем 
while(таймер < 5 секунд){

keybd_event('A', NULL, NULL, NULL);

}

Это сообщение отредактировал(а) bsa - 12.9.2009, 20:53
PM MAIL   Вверх
Annihilator
Дата 12.9.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



ну что-нить типа
Код

    time_t seconds, localseconds;
    seconds = localseconds = time (NULL);
    while (localseconds - seconds < 5)
    {
        localseconds = time (NULL);
                keybd_event('A', NULL, NULL, NULL);
    }

надо подключить
Код

#include<ctime>


Это сообщение отредактировал(а) Annihilator - 12.9.2009, 20:33


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Fatkh
Дата 12.9.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 5.9.2009

Репутация: 1
Всего: 1



Код

clock_t start, cur;
double t = 0;
start = clock();

while (t < 5) {
    /* Code */
    cur = clock();
    t = (double)(cur - start) / (double)CLOCKS_PER_SEC;
}

PM MAIL Jabber   Вверх
Fatkh
Дата 12.9.2009, 20:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 5.9.2009

Репутация: 1
Всего: 1



Цитата(Annihilator @  12.9.2009,  18:32 Найти цитируемый пост)
Код
time_t seconds, localseconds;
    seconds = localseconds = time (NULL);
    while (localseconds - seconds < 5)
    {
        localseconds = time (NULL);
                keybd_event('A', NULL, NULL, NULL);
    }


А вот так писать нельзя. В стандарте ничего не написано о том, что time_t считается в секундах. Поэтому код будет выполняться неопределенное время.
PM MAIL Jabber   Вверх
Anikmar
Дата 12.9.2009, 21:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Fatkh @  12.9.2009,  20:54 Найти цитируемый пост)
А вот так писать нельзя. В стандарте ничего не написано о том, что time_t считается в секундах. Поэтому код будет выполняться неопределенное время. 


А что по стандарту возвращает функция time(NULL) ?
PM MAIL ICQ   Вверх
zim22
Дата 12.9.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  12.9.2009,  21:10 Найти цитируемый пост)
что по стандарту возвращает функция time(NULL) ?

в стандарте не нашёл информации, но здесь написано, что
Цитата

Код

time_t time(time_t *timer);

The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970


Это сообщение отредактировал(а) zim22 - 12.9.2009, 21:18


--------------------
PM MAIL   Вверх
Fatkh
Дата 12.9.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 5.9.2009

Репутация: 1
Всего: 1



Цитата(Anikmar @  12.9.2009,  19:10 Найти цитируемый пост)
А что по стандарту возвращает функция time(NULL) ? 

Что угодно. Переменную типа time_t. И все (кроме того, что time_t - арифметический тип). 
The range and precision of times representable in clock_t and time_t are implementation-defined.


Цитата(zim22 @  12.9.2009,  19:16 Найти цитируемый пост)
в стандарте не нашёл информации, но здесь написано, что
Цитата

код C++
1:
time_t time(time_t *timer);

The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970


Это верно для некоторых реализаций. К примеру, для DigitalMars это не так: "time returns the current time in seconds elapsed since 00:00:00 GMT on January 1, 1968..."
Так что об этом нельзя даже предполагать. Что там секунды, тоже не факт. time_t может быть числом с плавающей точкой, а там и округление может сработать не так, как вы предполагаете.

Добавлено через 7 минут и 16 секунд
Цитата

The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970


А это из стандарта POSIX. Но не стандарта С или С++.
PM MAIL Jabber   Вверх
bsa
Дата 13.9.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Fatkh, прав:
Цитата(January 18 @  1999  WG14/N869)
       [#2] The time function determines the current calendar time.
       The encoding of the value is unspecified.

       Returns

       [#3] The time function  returns  the  implementation's  best
       approximation  to  the  current  calendar  time.   The value
       (time_t)-1  is  returned  if  the  calendar  time   is   not
       available.  If timer is not a null pointer, the return value
       is also assigned to the object it points to. 
Поэтому, чтобы узнать, сколько прошло секунд, нужно воспользоваться функцией difftime().

Fatkh, когда ссылаешься на стандар, пожалуйста, приводи цитаты сам, а не заставляй искать других.

Добавлено через 2 минуты и 48 секунд
Цитата(Fatkh @ 12.9.2009,  21:43)
А это из стандарта POSIX. Но не стандарта С или С++.

Если честно, сам по себе язык Си был создан для написания на нем операционной системы UNIX. По которой уже и делали стандарт POSIX, если не ошибаюсь. Поэтому, тут как с типом char - в стандарте не сказано, что char == byte, но все это подразумевают.
PM   Вверх
Fatkh
Дата 13.9.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 5.9.2009

Репутация: 1
Всего: 1



Цитата(bsa @  12.9.2009,  22:08 Найти цитируемый пост)
Fatkh, прав:
Цитата(January 18 @  1999  WG14/N869)
       [#2] The time function determines the current calendar time.
       The encoding of the value is unspecified.

       Returns

       [#3] The time function  returns  the  implementation's  best
       approximation  to  the  current  calendar  time.   The value
       (time_t)-1  is  returned  if  the  calendar  time   is   not
       available.  If timer is not a null pointer, the return value
       is also assigned to the object it points to. 
Поэтому, чтобы узнать, сколько прошло секунд, нужно воспользоваться функцией difftime().

Fatkh, когда ссылаешься на стандар, пожалуйста, приводи цитаты сам, а не заставляй искать других.

Добавлено через 2 минуты и 48 секунд
Цитата(Fatkh @ 12.9.2009,  21:43)
А это из стандарта POSIX. Но не стандарта С или С++.

Если честно, сам по себе язык Си был создан для написания на нем операционной системы UNIX. По которой уже и делали стандарт POSIX, если не ошибаюсь. Поэтому, тут как с типом char - в стандарте не сказано, что char == byte, но все это подразумевают. 


1. Для меня это само собой разумеется, это отнюдь не глубины языка. Для того, чтобы сказать, что main всегда возвращает тип int , тоже стандарт цитировать? К тому же то, что считаю более важным - "The range and precision of times representable in clock_t and time_t are implementation-defined." - я процитировал. Но принял к сведению - следующий раз приведу цитаты, мне не сложно.

2. С был написан для этого, но развился в главный язык встроенных систем и кроссплатформенной низкоуровневой разработки. Потому на Unix ориентироваться нельзя. К тому же Posix поддерживают не все. Боюсь, большая часть народа на творении мелкомягких сидит. Пример компилятора, не поддержвающего такую трактовку, я привел.

3. 
byte:
addressable unit of data storage large enough to hold any member of the basic character set of the execution environment
character:
single-byte character


Плюс 
A byte is composed of a contiguous sequence of bits, the number of which is implementation-defined. 

Но тут дело в другом. Я не знаю платформы, на которой выгодно было бы занимать под char часть байта. Вы тоже вряд ли. А функции времени - это уж как разработчику захочется.
PM MAIL Jabber   Вверх
Anikmar
Дата 13.9.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



В стандарте 99 про time_t ничего кроме перечисления его в типах не сказано.
А что говорит последний стандарт на выражение (time_t - time_t) - что будет в результате? Тоже неопределенность?

Интересно, нафига такой тип, которым непонятно как надо пользваться...
PM MAIL ICQ   Вверх
Fatkh
Дата 13.9.2009, 11:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 5.9.2009

Репутация: 1
Всего: 1



Цитата(Anikmar @  13.9.2009,  08:50 Найти цитируемый пост)
В стандарте 99 про time_t ничего кроме перечисления его в типах не сказано.
А что говорит последний стандарт на выражение (time_t - time_t) - что будет в результате? Тоже неопределенность?

Интересно, нафига такой тип, которым непонятно как надо пользваться... 


1. Значение будет типа time_t. 
2. Что значит непонятно? Для того, чтобы было понятно, есть библиотечные функции. Они предоставляют достаточный функционал. С типом вам  работать не нужно, работать нужно с функциями. Они  знают, что из себя представляет time_t.
3. А тип этот нужен потому, что С расчитан на многие платформы, и на какой-то удобнее реализовать time_t как double или char. Но функции определяют единый интерфейс работы с time_t и другими типами.

Это сообщение отредактировал(а) Fatkh - 13.9.2009, 11:06
PM MAIL Jabber   Вверх
Anikmar
Дата 13.9.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Fatkh @  13.9.2009,  11:06 Найти цитируемый пост)
2. Что значит непонятно? Для того, чтобы было понятно, есть библиотечные функции. Они предоставляют достаточный функционал. С типом вам  работать не нужно, работать нужно с функциями. Они  знают, что из себя представляет time_t.
3. А тип этот нужен потому, что С расчитан на многие платформы, и на какой-то удобнее реализовать time_t как double или char. Но функции определяют единый интерфейс работы с time_t и другими типами.

Ну да, в общем-то интерфесные функции есть, я согласен.

Просто непривычно иметь дело с С++ и не знать внутренности типов  smile . Я с time_t как-то вообще ни разу не сталкивался - не было нужды, вот и заинтересовался.

Спасибо за информацию.


PM MAIL ICQ   Вверх
ASMatic
Дата 14.9.2009, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: нет
Всего: 1



я бы организовал по другому:

Код

BOOL    timer = TRUE;

void main( void ) 
{

     SetTimer(....,Timer1, 5000, TimerProc );
 
     MyFunc();
}

void MyFunc( void )
{

    while (timer) {

            keybd_event('A', NULL, NULL, NULL);
    }

}

void TimerProc( void )
{
    timer = FALSE;
    KillTimer (Timer1 );
}


"лишняя" ф-я, но зато чистенько на апи + однозначно 5 сек.

Добавлено через 3 минуты и 22 секунды
ну и еще в цикл while желательно  добавить Sleep(50)  или больше чуток, все зависит от того насколько точно надо отсчитать 5сек, а то процессор загрузишь на 50% по другому...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.