Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Вниз
Помогите победить тетю клаву Найти похожие ветки
← →
RapTor © (2004-07-07 18:06) [0]Господа! Как можно из цикла, в коротом нельзя делать Application.ProcessMessages опросить быстро клавиатуру на предмет нажатия "Esc".
По портам 60 и 64 сразу говорю не канает. - не на всех системах пашет.
Может кто-то предложить что-то толковое, корректно и быстро работаеюще под всеми системами?
← →
Digitman © (2004-07-07 18:18) [1]заведи некую глобальную флаговую переменную
перед началом цикла флаг
стартуй доп.код.поток, в котором будет крутиться твой страшный цикл
в теле цикла проверяй этот флаг, поднятое его состояние есть искомое условие
взведение флага возложи на обработчик события Application.OnMessage(), где будут отслеживаться сообщения типа WM_KEYDOWN и в случае факта нажатия Esc будет взводиться этот флаг
← →
Digitman © (2004-07-07 18:32) [2]можно и иначе, без доп.потока, но суть - та же
в тело цикла вставь проверку :
if PeekMessage(Msg, MyForm.Handle, WM_KEYDOWN, WM_KEYDOWN, PM_NOREMOVE) and Msg.wParam = вирт_код_клавиши_Esc then
.. нажата ..
else
.. не нажата
← →
RapTor © (2004-07-07 20:31) [3]Спасибо Digitman ©
Сделал if PeekMessage Все путем. Выносить в отдельный поток мне слегка не удобно.
Может еще подскажешь...
У меня перед циклом
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Делается. Так надо, к сожалению.
И не срабатывает тогда if PeekMessage.
Что можно сделать?
P.S. Собственно из за этого я и читал порты на прямую.
← →
Игорь Шевченко © (2004-07-07 21:41) [4]
> SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
> SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Сам из под себя (а заодно и из-под потока клавиатурного ввода) табуретку вышибаешь. Нафига, спрашивается ?
← →
RapTor © (2004-07-07 22:30) [5]То: Игорь Шевченко.
Так надо. К сожалению, без форсажа не обойтись.
← →
Digitman © (2004-07-08 08:08) [6]
> RapTor © (07.07.04 22:30) [5]
> Так надо
ну надо так надо
тогда не жди, что кто-то не имеющий ни кванта времени сможет обработать прерывания клавиатуры
> без форсажа не обойтись
что ж за форсаж-то такой страшный ? прямо таки заинтриговал ...
← →
Digitman © (2004-07-08 08:33) [7]
> RapTor
это не ты ли там в облике Раптора №1 в "Сетях" про "сокет в компоненте" ? уж больно похоже по стилю изложения глубокой мысли - "не канает", "не пашет" ...
> Выносить в отдельный поток мне слегка не удобно
))
← →
RapTor © (2004-07-08 11:25) [8]To :Digitman ©
>>это не ты ли там в облике Раптора №1...
Вообщето нет.
>>что ж за форсаж-то такой...
Да ничего особенного не воротил. Но есть таймер в микросекундах.
Без реалтайма дает не точный результат. Вот и все.
Экстренный выход сделать надо но не могу въехать как.
← →
Digitman © (2004-07-08 12:26) [9]
> таймер в микросекундах
любопытно, зачем тебе понадобилось такое временное разрешение - микросекунды
> Без реалтайма дает не точный результат
если ты пытаешься осуществлять коммуникацию с каким-то прецизионным дивайсом, то многозадачная ОС - изначально неверный выбор, для этой цели существуют риэл-тайм ОС
← →
oomneeq (2004-07-08 20:40) [10]GetAsyncKeyState не спасет ли отца русской демократии?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardInpu t/KeyboardInputReference/KeyboardInputFunctions/GetAsyncKeyState.asp
← →
Digitman © (2004-07-09 09:06) [11]
> oomneeq
при риэл-тайм приоритете отца русской демократии уже ничто не спасет
← →
KADAN © (2004-07-09 10:28) [12]микросекуды??? постойте-ка...
(1/1000*сек)/(1/1000000*сек)=.... ОГО! дык это ж в тысячу раз меньше миллисекунды... я тоже хочу такую точность по времени... мож меня научишь?
← →
RapTor © (2004-08-02 17:41) [13]Найди инфу на RTSC и сам сможешь сделать.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c