Текущий архив: 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