Главная страница
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.025 c
1-1081978534
BAY
2004-04-15 01:35
2004.05.02
OpenGL


6-1078229131
V@ler@n
2004-03-02 15:05
2004.05.02
Отлов IP-пакетов в сети


14-1081502658
}|{yk
2004-04-09 13:24
2004.05.02
Я так понял в форум Основной уже никто не смотрит


14-1081635133
Soft
2004-04-11 02:12
2004.05.02
Соционика или типизация человеческой личности.


7-1078944588
TSa
2004-03-10 21:49
2004.05.02
Версия WINDOWS