![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnIdle в KOL
Un-man © (2003-02-12 10:19:00)Как в KOL заставить приложение выполнять что-то, пока нет других сообщений? В Делфах был OnIdle, а в KOL'е я ничего похожего не нашел. Заранее спасиба.
SPeller (2003-10-08 20:56:00) [1]
> Пытался сделать через дополнительный процесс (Thread) -
> но на время его выполнения программа подвисает. Странно...
А не должно. Что это за многопоточность получается тогда?
Vladimir Kladov (2003-10-08 15:16:00) [2]можно угадаю почему? Не надо вызывать execute. Надо вызывать resume. Смотрите примеры.
Sapersky (2003-10-08 14:24:00) [3]Мне нужно выполнить длительную обработку данных как можно быстрее, но чтобы программа при этом не подвисала. Использовать для этого таймер - по меньшей мере странно.
Пытался сделать через дополнительный процесс (Thread) - но на время его выполнения программа подвисает. Странно...
Yury Sidrov (2003-10-08 13:20:00) [4]Действительно, он соответствует VCL'овскому Done=True, т.к. на мой взгляд это единственный реально нужный вариант. Для вещей, которые в VCL делались при Done=False, лучше пользовать таймер.
Sapersky (2003-10-08 09:38:00) [5]Какой-то он тормозной, этот OnIdle - наверное, соответствует VCL'овскому Done=True. А мне бы надо Done=False.
Vladimir Kladov (2003-10-07 17:53:00) [6]В 1.85 появился RegisterIdleHandler. Оно конечно можно еще и в MCK добавить соответственно TKOLApplet.OnIdle.
Sapersky (2003-10-07 16:44:00) [7]Да, неплохо бы пример...
GandalfTheWhite (2003-03-20 11:46:00) [8]Пиши посмотрим...
Belest (2003-03-18 18:22:00) [9]Примерчик бы посмотреть...
Gandalf (2003-02-12 21:11:00) [10]Мда я про это подзабыл... но пожалуй нетрудно добавить OnIndy в КОЛ, затраты невели, хотя польза неочевидна.
Kladov (2003-02-12 16:07:00) [11]Зачем править kol.pas, когда свой цикл оработки сообщений никто не запретил? Даже для mck, пишем свой код в proj_1.inc, и все. Не забываем добавить после кода Exit; чтобы не сработал Run(...) в proj_2.inc.
Gandalf (2003-02-12 14:28:00) [12]Думаю пока только правкой КОЛ, вида:
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 объявить и т.п.). Можно еще поток организовать со слабым приоритетом. Можно таймер.