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

Вниз

OnIdle в KOL   Найти похожие ветки 

 
Un-man   (2003-02-12 10:19) [0]

Как в KOL заставить приложение выполнять что-то, пока нет других сообщений? В Делфах был OnIdle, а в KOL"е я ничего похожего не нашел. Заранее спасиба.


 
Gandalf   (2003-02-12 14:28) [1]

Думаю пока только правкой КОЛ, вида:

procedure Run( var AppletWnd: PControl );
begin
 AppletRunning := True;
 Applet := AppletWnd;
 AppletWnd.CreateWindow; //virtual!!!
 while not AppletTerminated do
 begin
   WaitMessage;
   if AppletWnd.ProcessMessages not then // New
     if Assigned(FOnIdle) then           // New
       FOnIdle...;                        // New
 end;
 if AppletWnd <> nil then
   TerminateExecution( AppletWnd );
end;

Плбс мелочь (сам Idle объявить и т.п.). Можно еще поток организовать со слабым приоритетом. Можно таймер.


 
Kladov   (2003-02-12 16:07) [2]

Зачем править kol.pas, когда свой цикл оработки сообщений никто не запретил? Даже для mck, пишем свой код в proj_1.inc, и все. Не забываем добавить после кода Exit; чтобы не сработал Run(...) в proj_2.inc.


 
Gandalf   (2003-02-12 21:11) [3]

Мда я про это подзабыл... но пожалуй нетрудно добавить OnIndy в КОЛ, затраты невели, хотя польза неочевидна.


 
Belest   (2003-03-18 18:22) [4]

Примерчик бы посмотреть...


 
GandalfTheWhite   (2003-03-20 11:46) [5]

Пиши посмотрим...


 
Sapersky ©   (2003-10-07 16:44) [6]

Да, неплохо бы пример...


 
Vladimir Kladov   (2003-10-07 17:53) [7]

В 1.85 появился RegisterIdleHandler. Оно конечно можно еще и в MCK добавить соответственно TKOLApplet.OnIdle.


 
Sapersky ©   (2003-10-08 09:38) [8]

Какой-то он тормозной, этот OnIdle - наверное, соответствует VCL"овскому Done=True. А мне бы надо Done=False.


 
Yury Sidrov   (2003-10-08 13:20) [9]

Действительно, он соответствует VCL"овскому Done=True, т.к. на мой взгляд это единственный реально нужный вариант. Для вещей, которые в VCL делались при Done=False, лучше пользовать таймер.


 
Sapersky ©   (2003-10-08 14:24) [10]

Мне нужно выполнить длительную обработку данных как можно быстрее, но чтобы программа при этом не подвисала. Использовать для этого таймер - по меньшей мере странно.
Пытался сделать через дополнительный процесс (Thread) - но на время его выполнения программа подвисает. Странно...


 
Vladimir Kladov   (2003-10-08 15:16) [11]

можно угадаю почему? Не надо вызывать execute. Надо вызывать resume. Смотрите примеры.


 
SPeller ©   (2003-10-08 20:56) [12]


> Пытался сделать через дополнительный процесс (Thread) -
> но на время его выполнения программа подвисает. Странно...

А не должно. Что это за многопоточность получается тогда?



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
14-1081678222
Ломброзо
2004-04-11 14:10
2004.05.02
Диалоги запросов


7-1074853800
ZMaximI
2004-01-23 13:30
2004.05.02
Байты и Биты


8-1075539418
Millennium
2004-01-31 11:56
2004.05.02
скриншот


14-1081661067
RealRascal
2004-04-11 09:24
2004.05.02
LIST of TMyType


4-1079025491
KME
2004-03-11 20:18
2004.05.02
WINAPI в чистом виде