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