Форум: "KOL";
Текущий архив: 2014.11.30;
Скачать: [xml.tar.bz2];
Внизформа в отдельном потоке Найти похожие ветки
← →
Инна (2009-10-07 13:02) [0]здравствуйте !
хотела бы узнать как сделать дочернюю форму которая выполняется в отдельном потоке, чтоб например при выполнении цикла в этой форме-зависала только она
p.s. принципиально интересует именно этот вариант а не applet.processmessages и прочее.
← →
halex (2009-10-07 14:11) [1]Не смотря на
> p.s. принципиально интересует именно этот вариант а не applet.
> processmessages и прочее.
хочу заметить, что формы "зависать" не должны, и в отдельный поток нужно выносить именно "цикл", а не форму.
PS
Хотя было бы интересно взглянуть на задачу для, которой нужно было бы так извращаться.
← →
Инна (2009-10-07 15:20) [2]ну может про потоки это черезчур
но нужна форма с отдельной очередью обработки сообщений никак
не связаной с главной формой и аплетом,тоесть не блокирующая их, если вообще это возможно
← →
abyss_by © (2009-10-07 20:41) [3]Была у меня подобная задача. Нужно было сделать выезжающее окошко над систреем, а-ля касперски. И вот если не в отдельном потоке, тормозила прогу безбожно, никакие " processmessages" не помогали. А так, без проблем :)
Для формы, с выполнением задачи в отдельном потоке:
.....
private
ToolTipThread: PThread;
.....
procedure TForm3.FormShowHint;
begin
if Assigned(ToolTipThread) then
ToolTipThread.Terminate;
ToolTipThread := NewThreadAutofree(ShowTollTips);
ToolTipThread.PriorityClass := THREAD_PRIORITY_IDLE;
ToolTipThread.Threadpriority := THREAD_PRIORITY_LOWEST;
end;
function TForm3.ShowTollTips(Sender: pThread): integer;
begin
//тут чего-то делается
end;
procedure TForm3.KOLForm1Destroy(Sender: PObj);
begin
if Assigned(ToolTipThread) then ToolTipThread.Terminate;
end;
Создаем её:procedure TForm1.fShowHint;
begin
NewForm3( Form3, Applet );
Form3.FormShowHint;
end;
Чему чего присвоить думаю понятно без комментов. Здесь в потоке только то, что выполняется при вызове формы.
← →
Инна (2009-10-08 10:48) [4]спасиба :) в тесте вроде работает
позже может еще чего уточню
← →
Инна (2009-10-08 11:26) [5]нет не то :( это просто отдельный поток
← →
abyss_by © (2009-10-09 17:15) [6]:) Что значит "просто отдельный поток"?
function TForm3.ShowTollTips(Sender: pThread): integer;
Здесь и обрабатывай свой цикл.
← →
Инна (2009-10-09 17:26) [7]
> Здесь и обрабатывай свой цикл.
мой цикл это очередь сообщений всей формы, вот че...
тоесть некая хрень (драгдроп из проги) эту очередь останавливает напроч пока незавершица, поэтому и возник вопрос
а запускается он как извесно перетягом мышькой-поэтому вынести это просто в отдельный поток невозможно
← →
abyss_by © (2009-10-09 21:45) [8]Обработать событие драг-энд-дроп в отдельном потоке естественно можно. Но тебе, как я понял, нужно не это. Че там за секретный цикл, кусочек кода можешь скинуть? Или стучись сюда - 2117062, это ася.
← →
Инна (2009-10-10 10:14) [9]
> Обработать событие драг-энд-дроп в отдельном потоке естественно
> можно
на прием, да можно как угодно, а на отдачу неполучица
цикла никакова нет, есть
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
-------------------------
DoDragDrop(DataObject,DropSource, DROPEFFECT_COPY, Effect);
---------------------
end;
где на DoDragDrop останавливается все, до тех пор пока DragDrop не закончится, в это время программа не получает события ввода,таймера,юзера и возможно еще чего то.
поэтому и надо эту форму изолировать от остальных
p.s.
DoDragDrop нельзя запустить без нажатия мыши, поэтому и просто отдельный поток отпадает
← →
abyss_by © (2009-10-10 13:55) [10]Как вариант с потоком, можно попробовать создать свой объект от TThread, где перебить Execute. Ты в VCL проекте используешь KOL?
← →
Инна (2009-10-10 15:21) [11]нет кол в коле
← →
Barloggg (2009-10-13 16:14) [12]ну, можно создать вторую форму в виде dll. так точняк все без проблем будет.
особенность кол в том, что для dll придется создавать свой applet и вот вам пожалуйста собственная очередь сообщений. со всеми причитающими mousemove и тому подобное.
на сайте есть пример формы в длл. в разделе "примеры".
← →
Инна (2009-10-14 12:55) [13]кстати бала такая мысль-вылетела из башки :)
фишка работает,но в оригинале там форма создается пустая,а я подключала форму МСКшную ,может я чего не так сделала но сообщения от таймера она не получает :(
да и делать дллху изза одной опции както не круто-неужели эти аплеты так нельзя разделить ???
← →
Ruzzz © (2009-10-16 04:49) [14]По поводу таймеров в книге по KOL глава 5.7. Часы (TTimer) - есть уточнение о работе таймеров в многопоточном приложении, может оно?
← →
halex (2009-10-16 12:20) [15]
> DoDragDrop нельзя запустить без нажатия мыши, поэтому и
> просто отдельный поток отпадает
Вы бы поделились минимальным приложением, а то если честно писать что-то ради кого-то, тупо лень.
А почему нельзя запустить поток в Button1MouseDown?
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2014.11.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.023 c