| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Выполнение цикла while в течении 5 сек |
| Автор: kb64 12.9.2009, 19:46 |
| Помогите реализовать, спасибо. |
| Автор: zim22 12.9.2009, 19:49 |
| Sleep |
| Автор: kb64 12.9.2009, 19:59 |
| дык слип вроде остановит цикл ? А мне нужно чтобы скажем while(таймер < 5 секунд){ keybd_event('A', NULL, NULL, NULL); } |
| Автор: Annihilator 12.9.2009, 20:32 | ||||
ну что-нить типа
надо подключить
|
| Автор: Fatkh 12.9.2009, 20:36 | ||
|
| Автор: Anikmar 12.9.2009, 21:10 | ||
А что по стандарту возвращает функция time(NULL) ? |
| Автор: zim22 12.9.2009, 21:16 | ||||
в стандарте не нашёл информации, но http://programmersforum.ru/showthread.php?p=81289 написано, что
|
| Автор: Fatkh 12.9.2009, 21:43 | ||||
Что угодно. Переменную типа time_t. И все (кроме того, что time_t - арифметический тип). The range and precision of times representable in clock_t and time_t are implementation-defined.
Это верно для некоторых реализаций. К примеру, для DigitalMars это не так: "time returns the current time in seconds elapsed since 00:00:00 GMT on January 1, 1968..." Так что об этом нельзя даже предполагать. Что там секунды, тоже не факт. time_t может быть числом с плавающей точкой, а там и округление может сработать не так, как вы предполагаете. Добавлено через 7 минут и 16 секунд
А это из стандарта POSIX. Но не стандарта С или С++. |
| Автор: bsa 13.9.2009, 00:08 | ||||
Fatkh, прав:
Fatkh, когда ссылаешься на стандар, пожалуйста, приводи цитаты сам, а не заставляй искать других. Добавлено через 2 минуты и 48 секунд
Если честно, сам по себе язык Си был создан для написания на нем операционной системы UNIX. По которой уже и делали стандарт POSIX, если не ошибаюсь. Поэтому, тут как с типом char - в стандарте не сказано, что char == byte, но все это подразумевают. |
| Автор: Fatkh 13.9.2009, 01:01 | ||
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 часть байта. Вы тоже вряд ли. А функции времени - это уж как разработчику захочется. |
| Автор: Anikmar 13.9.2009, 10:50 |
| В стандарте 99 про time_t ничего кроме перечисления его в типах не сказано. А что говорит последний стандарт на выражение (time_t - time_t) - что будет в результате? Тоже неопределенность? Интересно, нафига такой тип, которым непонятно как надо пользваться... |
| Автор: Fatkh 13.9.2009, 11:06 | ||
1. Значение будет типа time_t. 2. Что значит непонятно? Для того, чтобы было понятно, есть библиотечные функции. Они предоставляют достаточный функционал. С типом вам работать не нужно, работать нужно с функциями. Они знают, что из себя представляет time_t. 3. А тип этот нужен потому, что С расчитан на многие платформы, и на какой-то удобнее реализовать time_t как double или char. Но функции определяют единый интерфейс работы с time_t и другими типами. |
| Автор: Anikmar 13.9.2009, 21:22 | ||
Ну да, в общем-то интерфесные функции есть, я согласен. Просто непривычно иметь дело с С++ и не знать внутренности типов Спасибо за информацию. |
| Автор: ASMatic 14.9.2009, 02:10 | ||
я бы организовал по другому:
"лишняя" ф-я, но зато чистенько на апи + однозначно 5 сек. Добавлено через 3 минуты и 22 секунды ну и еще в цикл while желательно добавить Sleep(50) или больше чуток, все зависит от того насколько точно надо отсчитать 5сек, а то процессор загрузишь на 50% по другому... |
| Автор: mrbrooks 14.9.2009, 09:37 |
автор ни чего про WinAPI не говорил |
| Автор: ller 14.9.2009, 09:41 |
| Так таймеры есть под все платформы. |
| Автор: Zerstroer 21.9.2009, 12:04 | ||
| Решаю сходную задачу. Прошу помочь. Требуется выполнение события по таймеру. При этом нежелательна прогонка пустых циклов, так как важнее не точность, а минимальная загрузка процессора и памяти. Пишу консольное приложение под UNIX. (g++). Fatkh был предложен достаточно изящный алгоритм, но не совсем подходит, так как имеет место прогонка цикла (while).
Что можете предложить/посоветовать? |
| Автор: xvr 21.9.2009, 12:07 | ||
sleep, nanosleep, alarm, select |
| Автор: Zerstroer 21.9.2009, 12:33 |
| Спасибо! Почему-то думал, что sleep - требует виндузовскую <dos.h>. Спасибо за наставление на путь истинный. Все гиперпросто оказалось! |
| Автор: ller 21.9.2009, 16:15 |
| http://www.freesource.info/wiki/Stat%27i/KratkoOboVsjom/Clang/part2/part4& |
| Автор: SVN74 21.9.2009, 18:10 |
| DWORD D = GetTickCount(); do { //Бла, Бла, Бла (5 сек) }while((GetTickCount()-D)<5000); |