|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.09.2010, 12:22 | #1 |
Регистрация: 01.09.2010
Сообщений: 5
|
Как заменить sleep в потоке? чтобы получить задержку 5 мили
Здравствуйте Уважаемые!
Мне нужна Ваша помощь. Есть поток, мне нужно задержать процедуру (Updatedann) на 5 милисек. Код:
А на самом деле процедура (Updatedann) выполняется только через 15 мсек. Если вообще убрать sleep, то процедура (Updatedann) выполняется за 0.16 милисек ~(примерно, очень быстро). Как сделать что бы процедура (Updatedann) в потоке выполнялась через каждые 5 милисек? что бы можно было регулировать задержку. |
01.09.2010, 13:01 | #2 |
Пользователь
Регистрация: 29.07.2009
Сообщений: 72
|
может стоит использовать цикл?
while (пока не истекло время) do Sleep(1); или while (пока не полностью выполнилась синхронизация) do Sleep(1);
Совершенство в простоте
|
01.09.2010, 13:59 | #3 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Можете пояснить зачем?
Дело в том, что ответ на этот вопрос, сильно зависит от того, зачем вам это надо.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
01.09.2010, 14:01 | #4 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Sleep(1) также бессмысленнен, как и sleep(5). Меньше 15 ни таймер, ни sleep не едят.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
01.09.2010, 14:35 | #5 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
В Windows, и тем более в потоке это вообще бессмысленно. Это не система реального времени.
|
01.09.2010, 14:48 | #6 | |
Регистрация: 01.09.2010
Сообщений: 5
|
Цитата:
В процедуре (Updatedann) производятся вычисления, после они выводятся на экран в последствии данные будут передаваться оборудованию через RS232. Мне нужно регулировать время выполнения этой процедуры. Просто на разных машинах скорость будет разная, а я хочу что бы была возможность регулировать скорость выполнения. Помогите, в каком направление капать, или привидите пример... Наверника сталкивались. Последний раз редактировалось Dasverd2010; 01.09.2010 в 14:51. |
|
01.09.2010, 15:00 | #7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Про работу с оборудованием я пас.
Но что точно я вам скажу - Synchronize тут совершенно не в тему, потому что он может задержать выполнение на произвольное количество времени. Вам как минимум нужен отдельный поток, который не будет иметь таких блокировок.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
01.09.2010, 15:36 | #8 |
Регистрация: 01.09.2010
Сообщений: 5
|
Оборудование допустим, я не буду использовать. Help me...
|
01.09.2010, 15:42 | #9 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Вы же только что сказали:
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
07.09.2010, 11:36 | #10 | |
Регистрация: 01.09.2010
Сообщений: 5
|
Цитата:
Я замерял время задержки (sleep), функцией: Код:
Вот результаты: при sleep(15); Будет выводится сообщение: (Время выполнения фукции = ~ 15 милисек) при sleep(5); Будет выводится сообщение: (Время выполнения фукции = ~15 милисек) Более точные замеры можно производить следующем способом: С помощью функций (QueryPerformanceFrequency, QueryPerformanceCounter) QueryPerformanceCounter - функция Win32 API. QueryPerformanceFrequency - возвращает частоту счётчика count/sec. QueryPerformanceCounter - возвращает текущее значение счетчика с высоким разрешением производительности. Код:
Следовательно, функция sleep(1) производит задержку в 1 милисекунду, только измерять нужно функциями (QueryPerformanceFrequency, QueryPerformanceCounter). Так же я нашел способ задержки функции в микросекундах: Код:
Если возник интерес или вопросы стучите в аську 221-955-95 (четыре). Ник: RAKETA буду рад обсудить Продолжаем обсуждать... Последний раз редактировалось Dasverd2010; 07.09.2010 в 11:51. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как округлить милисекунды в кол-во сек и мили сек? | XerSon | Общие вопросы Delphi | 2 | 09.06.2010 10:26 |
Как приостаносить поток до события в другом потоке | Sionus | Помощь студентам | 2 | 30.03.2010 21:51 |
как сделать паузу (или задержку) в цыкле : с# | Natok | Помощь студентам | 7 | 30.05.2009 12:55 |
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки | urgu_st | Помощь студентам | 13 | 23.10.2007 09:14 |
Как организовать задержку выполнения?? | Kenifer | Общие вопросы Delphi | 12 | 03.09.2007 21:56 |