Главная страница
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.071 c
4-1078377183
-=[SDA]=-
2004-03-04 08:13
2004.05.02
Как узнать версию проекта???


1-1081838568
Bond
2004-04-13 10:42
2004.05.02
Напечатать конверт A5


1-1082110912
sapsi
2004-04-16 14:21
2004.05.02
Появление символа подчеркивания при переводе в Pchar


7-1079364823
Pul
2004-03-15 18:33
2004.05.02
Как отследить запуск и завершение работы DOS-приложения


1-1081509914
LNick
2004-04-09 15:25
2004.05.02
Обработчик событий