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

Вниз

Прога использует неэкономно процессор   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
3-29206
widoms
2004-01-21 07:21
2004.02.10
Пропадают записи в подчинённой таблице.


7-29634
serega_sss
2003-11-24 01:27
2004.02.10
ИРПС


3-29253
Stas
2004-01-19 09:29
2004.02.10
Запрос


8-29482
WondeRu
2003-10-09 08:38
2004.02.10
Цифровой Фотоаппарат + Компьютер


1-29374
Devel
2004-01-28 19:38
2004.02.10
как общаться с cервисом ?