Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прога использует неэкономно процессор [D5]


Страницы:   1 2

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]

Ну а какбы хук поставить на клаву вы не хотите, может решение координальнее получиться и осмысленнее?!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо