Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.23;
Скачать: CL | DM;

Вниз

Приостановить выполнение потока на 1 мс или меньше.   Найти похожие ветки 

 
ilyas09   (2010-10-30 09:54) [0]

Задача: в потоке производится чтение и обработка данных из драйвера аппаратного устройства. Когда данные в буфере заканчиваются необходимо на короткое время приостановить выполнение потока, чтобы основной поток приложения и другие приложение смогли поработать.
Так как хочется сделать задержку как можно короче, то Sleep(1) не подходит. Чем её можно заменить? Может быть есть процедура просто передающая выполнение Windows?


 
sniknik ©   (2010-10-30 11:53) [1]

> то Sleep(1) не подходит. Чем её можно заменить?
Sleep(0)... но тоже не гарантия, что задержка не окажется например 5 мин...

> Может быть есть процедура просто передающая выполнение Windows?
т.е. тебе нужен ProsessMessage от виндовс. не бывает, ИМХО.


 
ilyas09   (2010-10-30 12:14) [2]

sniknik, ProsessMessage выполняет только события моей программы или выполняются и другие программы запущенные в windows?


 
Anatoly Podgoretsky ©   (2010-10-30 12:30) [3]

> sniknik  (30.10.2010 11:53:01)  [1]

А задержку в пол миллисекунды указывать как 0,5


 
Anatoly Podgoretsky ©   (2010-10-30 12:31) [4]

> ilyas09  (30.10.2010 12:14:02)  [2]

ProsessMessage это опрос очереди сообщений!


 
ilyas09   (2010-10-30 12:37) [5]

Anatoly Podgoretsky, извиняюсь за непонятливость, но ProsessMessage это опрос очереди сообщений чего?


 
sniknik ©   (2010-10-30 12:48) [6]

> извиняюсь за непонятливость
это потому что читаешь кусками, понравившиеся части. попробуй прочитать остальное
> т.е. тебе нужен ProsessMessage от виндовс. не бывает, ИМХО.


 
sniknik ©   (2010-10-30 12:50) [7]

хотя, он бы тоже не помог, сам то он времени не занимает практически, но вот вызываемая им работа по событию, может притормозить надолго.


 
Плохиш ©   (2010-10-30 13:22) [8]


> в потоке производится


> приостановить выполнение потока, чтобы основной поток приложения
> и другие приложение смогли поработать.

Если это те потоки, про которые я подумал, то автору надо нанять программиста.


 
sniknik ©   (2010-10-30 15:02) [9]

а программист быстренько напишет операционную систему реального времени... :о)


 
sniknik ©   (2010-10-30 15:03) [10]

p.s. можно конечно и работу с устройством по другому организовать, но это же скучно, правда ведь?


 
ilyas09   (2010-11-01 12:10) [11]

Любите вы, господа, говорить загадками. :)
Во-первых, мне не требуются точные измерения времени задержки.
Во-вторых, мне не требуется большое постоянство.  Если задержка вдруг однократно окажется не 100 мкс, а 10 секунд, то это приведёт только к уменьшению скорости работы.

Со sleep(0) всё нормально работает, обновляется и ворма и другие программы, но загрузка процессора по одному ядру вырастает до 100% - что и понятно.
При этом, при отсутствии активной работы других программ, за 10 секунд производится 2 000 000 вызовов функции sleep(0), т.е. sleep(0) даёт среднюю задержку порядка 5 мкс.

Кароче, хочется просто уменьшить загрузку процессора усыпив программу микросекунд на 200, в среднем.
Впрочем, если это невозможно, то оставлю sleep(0).


 
brother ©   (2010-11-01 12:12) [12]

> усыпив программу микросекунд на 200

О_о не думаю, что у тебя это получится


 
clickmaker ©   (2010-11-01 12:19) [13]

> в потоке производится чтение и обработка данных из драйвера
> аппаратного устройства. Когда данные в буфере заканчиваются
> необходимо на короткое время приостановить выполнение потока,
> чтобы основной поток приложения и другие приложение смогли
> поработать

ничё не понятно. Если чтение в отдельном потоке, то почему остальные не могут поработать?


 
Сергей М. ©   (2010-11-01 12:33) [14]


> ilyas09


Никакие "задержки" в твоей задаче нафих не нужны.
Достаточно задействовать работу с устройством в асинхронном режиме с использованием overlap-механизма нотификаций.
Все то время пока твой поток будет хдать очер.порции данных от устройства, он будет находиться в kernel-time и не будет отнимать у планировщика потоков временные кванты на свое обслуживание.


 
Германн ©   (2010-11-01 12:43) [15]


> ничё не понятно. Если чтение в отдельном потоке, то почему
> остальные не могут поработать?

Synchronize(DoWork);



Страницы: 1 вся ветка

Текущий архив: 2011.01.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
2-1288164273
LDV
2010-10-27 11:24
2011.01.23
парсинг строки имени файла


2-1288200299
Чайник
2010-10-27 21:24
2011.01.23
Программное перемещение ScrollBar в TMemo


15-1286341199
12
2010-10-06 08:59
2011.01.23
Отчет за период. Интерфейс. Как Вы понимаете, с какого по какое?


3-1251463219
kyn66
2009-08-28 16:40
2011.01.23
Подсветка ячейки грида по значению соседней


2-1288543652
mefodiy
2010-10-31 19:47
2011.01.23
Юникод в DBGrid