Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Внизпотоки... Найти похожие ветки
← →
i-am-vladko © (2006-10-12 19:20) [0]Доброго времени суток ;-)
Проблема с кодом :
ParentThread := parTh;
Result := BeginThread(nil,0,@Execute,nil,0,ThID); // -
создает поток
ChildThread := Result;
procedure Execute;
begin
if GetCurrentThread <> ChildThread then Showmessage("SO FUCKING WHAT?");
fHelpForm := TfHelpForm.Create(nil);
fHelpForm.FormShow(nil);
suspendThread(ParentThread);
end;
Вопрос : "Почему появляется мессага с нецензурным содержанием"?
← →
Джо © (2006-10-12 19:22) [1]> Вопрос : "Почему появляется мессага с нецензурным содержанием"?
Потому, очевидно, что GetCurrentThread <> ChildThread.
← →
i-am-vladko © (2006-10-12 19:22) [2]p.s. parTh (он же ParentThread) - поток, запускающий ChildThread
← →
i-am-vladko © (2006-10-12 19:25) [3]
> Потому, очевидно, что GetCurrentThread <> ChildThread.
да... ответ достоен мастера gg=))
← →
Джо © (2006-10-12 19:33) [4]> [3] i-am-vladko © (12.10.06 19:25)
>
> > Потому, очевидно, что GetCurrentThread <> ChildThread.
>
> да... ответ достоен мастера gg=))
Ну, почитал бы, что ИМЕННО возвращает функция GetCurrentThread. Это псевдо-дескриптор, а вовсе не настоящий дескриптор текущего потока.
← →
i-am-vladko © (2006-10-12 19:35) [5]она возвращает в точности ParentThread...
← →
Leonid Troyanovsky © (2006-10-12 19:38) [6]
> i-am-vladko © (12.10.06 19:20)
> Вопрос : "Почему появляется мессага с нецензурным содержанием"?
Потому, что показанный код большего не заслужил.
--
Regards, LVT.
← →
i-am-vladko © (2006-10-12 19:43) [7]
> Потому, что показанный код большего не заслужил.
в чем ошибка - то? почему Child-поток пускается, но не в отдельном потоке???
← →
Leonid Troyanovsky © (2006-10-12 19:51) [8]
> i-am-vladko © (12.10.06 19:43) [7]
> в чем ошибка - то? почему Child-поток пускается, но не в
> отдельном потоке???
Ошибок много.
Прежде всего, поток, как раз, пускается.
Можно посмотреть, например, в отладчике окно "threads"
Ну, и GetCurrentThread это псевдохендл, имеет одно
фиксированное значение для любых потоков (кроме Win CE).
Затем, во втоичных потоках не создают и не показывают формы.
И, наконец, если ParentThread приостановят, то кто ж его
продолжит?
--
Regards, LVT.
← →
i-am-vladko © (2006-10-12 19:57) [9]
> Ну, и GetCurrentThread это псевдохендл, имеет одно
> фиксированное значение для любых потоков (кроме Win CE).
>
а зачем он тогда нужен, етот GetCurrentThread и как тогда определить настоящий хендл?
← →
Kolan © (2006-10-12 19:59) [10]
> И, наконец, если ParentThread приостановят, то кто ж его
> продолжит?
Добью тебя тем, что код можно выделить нажав на кнопку "Код", а не жирным шрифтом :)
← →
Leonid Troyanovsky © (2006-10-12 20:07) [11]
> i-am-vladko © (12.10.06 19:57) [9]
> а зачем он тогда нужен, етот GetCurrentThread и как тогда
> определить настоящий хендл?
Используется для подстановки в winapi функции, требующие хендла потока. Т.е., для применения этих функций к самому себе.
Для получения "настоящего" хендла требуется либо DuplicateHandle,
либо использование TThread.Handle.
Вообще-то, в данном случае, хендлы особо и не нужны,
бо хватит чего-то типа MainThreadId <> ThiD.
Хотя, даже подобное сравнение тоже не совсем корректно,
бо требует синхронизации. (RTFM: TThread.Syncronization).
Т.е., для начала надо вплотную ознакомится с классом TThread.
--
Regards, LVT.
← →
i-am-vladko © (2006-10-12 20:21) [12]
> > а зачем он тогда нужен, етот GetCurrentThread и как тогда
>
> > определить настоящий хендл?
Огромное спасибо - очень информативно, вроде разобрался))
> И, наконец, если ParentThread приостановят, то кто ж его
> продолжит?
Насчет синхронизации могу добавить, что идея - запустить ParentThread по событию формы, которую создает ChildThread...
>>Затем, во втоичных потоках не создают и не показывают формы.
А ето еще почему???
← →
Kolan © (2006-10-12 20:39) [13]
> Затем, во втоичных потоках не создают и не показывают формы.
И вообще не используют VCL, так как почти все они не потоко безопасны.
← →
Leonid Troyanovsky © (2006-10-12 20:46) [14]
> i-am-vladko © (12.10.06 20:21) [12]
> А ето еще почему???
RTFM: Delphi help. TThread
--
Regards, LVT.
← →
MsGuns © (2006-10-13 12:31) [15]>Leonid Troyanovsky © (12.10.06 19:51) [8]
>Затем, во втоичных потоках не создают и не показывают формы.
Тексейра и Пачеко с Вами, уважаемый Леонид, категорически не согласны
;))
← →
MsGuns © (2006-10-13 14:30) [16]Приношу извенения мэтру ;))
У тексейры главная форма сначала создает форму (в основном потоке), а уже новая форма запускает вторичный поток, который на ней рисует то, что ему надо методом Synchronize
← →
nikola232 © (2006-10-13 14:49) [17]Послушайтесь Leonid Troyanovsky - го, юзайте TThread;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.064 c