![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прога использует неэкономно процессор [D5]
Olfi © (2003-09-15 21:55:00)
Получается так, что процессор используется прогой на 98%.
Функция проги заключается в том, чтобы постоянно проверять, нажата ли клавиша на клаве... То есть цикл в неё всё время проверяет. Что делать? Изменить алгоритм или... Я сомневаюсь, что для такой простой задачи нужно полностью забивать процессор частотой 1,7 Гц
Alec (2003-11-23 07:08:00) [1]
ага а вопрос то помойму был как отлавить клавишу (ОДНУ - я так понял) ну и пусть использует "горячие" клавишы!
Denius (2003-10-14 16:31:00) [2]
ДА чего тут спорить... По моему под такие задачи шикарно подходит Thread. Отдельный поток, вставляем Sleep и усе шикарно и красиво...
panov (2003-09-17 22:44:00) [3]
>Verg © (17.09.03 17:59) [20]
> pasha_676 © (17.09.03 17:15) [18]
Опрос в бесконечном цикле нагрузит проц в любом потоке.
За исключением потока с циклом со Sleep(1), например...
Verg (2003-09-17 17:59:00) [4]
> pasha_676 © (17.09.03 17:15) [18]
Опрос в бесконечном цикле нагрузит проц в любом потоке.
Verg (2003-09-17 17:53:00) [5]
> Если не учитывать то, что прога, в которой юзается клава
> не получает сообщений о нажатии
Разъясни.
Это читал?
http://www.delphimaster.ru/articles/hooks/index.html
pasha_676 (2003-09-17 17:15:00) [6]
> ТАймер........ нет. Это неудобно. Этот прога должна иметь
> отдельный модуль, который будет следить за клавой. Модуль
> Forms в нём юзаться не должен.
Батенька таймер можно создать и без формы... Таймер и форма вещи вообще разные...
> А какие есть способы?
Опрос в отдельном потоке. В соседнем форуме о нем сейчас писали...
Olfi (2003-09-17 17:00:00) [7]
Самый подходящий вариант из тех, что предложили, на мой взгляд - Sleep ().
ТАймер........ нет. Это неудобно. Этот прога должна иметь отдельный модуль, который будет следить за клавой. Модуль Forms в нём юзаться не должен.
Hook... Вы имеет ввиду перехватить нажатие7 Отлично работает! Если не учитывать то, что прога, в которой юзается клава не получает сообщений о нажатии :)))))
А какие есть способы?
Такой опрос клавы за один момент опрашивает клавы около 20 раз! По-моему действительно проще сделать чо-то вроде Sleep (10).
Опрашивать клааву нужно, как вы поняли не своей проги, а всех.
pasha_676 (2003-09-17 16:16:00) [8]
Мда. Сильно. Повесить прогу для опроса клавы... Так уже давно даже в микропроцессорах не програмят. Так что там у нас насчет хуков и/или таймеров? Не посмотрел еще материал по ним? Будем тупить или изучать?
Olfi (2003-09-17 16:14:00) [9]
Ну да, проверка в бесконечном цикле.
while (IsRun) do
begin
for i := 3 to 255 do
begin
//Проверка нажатия клавиши и т. д.
end;
Application.ProcessMessages;
end;
Я пробовал отключить всю проверку, оставляя только цикл и... почти ничего не изменилось. Что делать?
Olfi (2003-09-17 16:10:00) [10]
Ну да, проверка в бесконечном цикле.
while (IsRun) do
begin
for i := 3 to 255 do
begin
//Проверка нажатия клавиши и т. д.
end;
Application.ProcessMessages;
end;
Я пробовал отключить всю проверку, оставляя только цикл и... почти ничего не изменилось. Что делать?
Е-Моё имя (2003-09-16 13:25:00) [11]
дык спать надо 1-2, и хватит
или ваще 0
y-soft (2003-09-16 13:22:00) [12]
Лёша © (16.09.03 11:34) [11]
Если это первичный поток, то вместо загрузки процессора получится подвисание приложения..
Лёша (2003-09-16 11:34:00) [13]
если используется вечный цикл, впихни в него :
Sleep(i);
где i = 1... сколько не жалко.
должно помочь.
HolACost! (2003-09-16 11:31:00) [14]
Я знаю, но ето что-то всётаки не то! Гы!
Забиваем! Пис!
AGGRESSOR (2003-09-16 11:23:00) [15]
> может он ловит не только в соей проге
Виртуальная клавиша может быть глобальной. Хотя чего мы тут разошлись? Он уже наверняка давно все сделал :))
HolACost! (2003-09-16 11:20:00) [16]
ГЫ! В вопросе не указана сфера применения ловушки - может он ловит не только в соей проге - помоему это как-раз так и есть! Извините, но....
Хотя согласен - решайте!
AGGRESSOR (2003-09-16 11:16:00) [17]
А по-моему правильнымрешением будет виртуальная клавишва, а не хук. Но для этого надо кардинально(а не как-нибудь иначе, вроде чего-то связанного с координатами) переделывать логику программы, а для таймера нужно лишь одну строчку. Решайте.
HolACost! (2003-09-16 11:03:00) [18]
координальнее - вся математика этой части программы сменится, чем если менять просто существующий код!!!
На счёт не самого простого решения - это извините правильное решение, а вот о его сложности судить не мне - для меня это просто, но это кому как!
AGGRESSOR (2003-09-16 10:59:00) [19]
>HolACost! © (16.09.03 10:56) [4]
"координальнее"???Это как, интересно? :)
Хук- это не самое простое решение. Хотя гораздо эффективнее.
HolACost! (2003-09-16 10:56:00) [20]
Ну а какбы хук поставить на клаву вы не хотите, может решение координальнее получиться и осмысленнее?!