Главная страница
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.007 c
2-1288876929
Кирей
2010-11-04 16:22
2011.01.23
Недостаточно сведений из основной таблицы для обновления


2-1288813366
Doctordradd
2010-11-03 22:42
2011.01.23
Считывание данных в форму


11-1228208201
Dy1
2008-12-02 11:56
2011.01.23
юникодовый ListView


15-1285962349
vuk
2010-10-01 23:45
2011.01.23
Немного про то как мотались в Монголию


2-1289220381
12
2010-11-08 15:46
2011.01.23
запрос к двум файлам Excel через ADO