![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
потоки...
i-am-vladko © (2006-10-12 19:20:00)Доброго времени суток ;-)
Проблема с кодом :
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;
Вопрос : " Почему появляется мессага с нецензурным содержанием"?
nikola232 (2006-10-13 14:49:00) [1]Послушайтесь Leonid Troyanovsky - го, юзайте TThread;
MsGuns (2006-10-13 14:30:00) [2]Приношу извенения мэтру ;))
У тексейры главная форма сначала создает форму (в основном потоке), а уже новая форма запускает вторичный поток, который на ней рисует то, что ему надо методом Synchronize
MsGuns (2006-10-13 12:31:00) [3]>Leonid Troyanovsky © (12.10.06 19:51) [8]
>Затем, во втоичных потоках не создают и не показывают формы.
Тексейра и Пачеко с Вами, уважаемый Леонид, категорически не согласны
;))
Leonid Troyanovsky (2006-10-12 20:46:00) [4]
> i-am-vladko © (12.10.06 20:21) [12]
> А ето еще почему???
RTFM: Delphi help. TThread
--
Regards, LVT.
Kolan (2006-10-12 20:39:00) [5]
> Затем, во втоичных потоках не создают и не показывают формы.
И вообще не используют VCL, так как почти все они не потоко безопасны.
i-am-vladko (2006-10-12 20:21:00) [6]
> > а зачем он тогда нужен, етот GetCurrentThread и как тогда
>
> > определить настоящий хендл?
Огромное спасибо - очень информативно, вроде разобрался))
> И, наконец, если ParentThread приостановят, то кто ж его
> продолжит?
Насчет синхронизации могу добавить, что идея - запустить ParentThread по событию формы, которую создает ChildThread...
>>Затем, во втоичных потоках не создают и не показывают формы.
А ето еще почему???
Leonid Troyanovsky (2006-10-12 20:07:00) [7]
> i-am-vladko © (12.10.06 19:57) [9]
> а зачем он тогда нужен, етот GetCurrentThread и как тогда
> определить настоящий хендл?
Используется для подстановки в winapi функции, требующие хендла потока. Т.е., для применения этих функций к самому себе.
Для получения "настоящего" хендла требуется либо DuplicateHandle,
либо использование TThread.Handle.
Вообще-то, в данном случае, хендлы особо и не нужны,
бо хватит чего-то типа MainThreadId <> ThiD.
Хотя, даже подобное сравнение тоже не совсем корректно,
бо требует синхронизации. (RTFM: TThread.Syncronization).
Т.е., для начала надо вплотную ознакомится с классом TThread.
--
Regards, LVT.
Kolan (2006-10-12 19:59:00) [8]
> И, наконец, если ParentThread приостановят, то кто ж его
> продолжит?
Добью тебя тем, что код можно выделить нажав на кнопку "Код", а не жирным шрифтом :)
i-am-vladko (2006-10-12 19:57:00) [9]
> Ну, и GetCurrentThread это псевдохендл, имеет одно
> фиксированное значение для любых потоков (кроме Win CE).
>
а зачем он тогда нужен, етот GetCurrentThread и как тогда определить настоящий хендл?
Leonid Troyanovsky (2006-10-12 19:51:00) [10]
> i-am-vladko © (12.10.06 19:43) [7]
> в чем ошибка - то? почему Child-поток пускается, но не в
> отдельном потоке???
Ошибок много.
Прежде всего, поток, как раз, пускается.
Можно посмотреть, например, в отладчике окно "threads"
Ну, и GetCurrentThread это псевдохендл, имеет одно
фиксированное значение для любых потоков (кроме Win CE).
Затем, во втоичных потоках не создают и не показывают формы.
И, наконец, если ParentThread приостановят, то кто ж его
продолжит?
--
Regards, LVT.
i-am-vladko (2006-10-12 19:43:00) [11]
> Потому, что показанный код большего не заслужил.
в чем ошибка - то? почему Child-поток пускается, но не в отдельном потоке???
Leonid Troyanovsky (2006-10-12 19:38:00) [12]
> i-am-vladko © (12.10.06 19:20)
> Вопрос : "Почему появляется мессага с нецензурным содержанием"?
Потому, что показанный код большего не заслужил.
--
Regards, LVT.
i-am-vladko (2006-10-12 19:35:00) [13]она возвращает в точности ParentThread...
Джо (2006-10-12 19:33:00) [14]> [3] i-am-vladko © (12.10.06 19:25)
>
> > Потому, очевидно, что GetCurrentThread <> ChildThread.
>
> да... ответ достоен мастера gg=))
Ну, почитал бы, что ИМЕННО возвращает функция GetCurrentThread. Это псевдо-дескриптор, а вовсе не настоящий дескриптор текущего потока.
i-am-vladko (2006-10-12 19:25:00) [15]
> Потому, очевидно, что GetCurrentThread <> ChildThread.
да... ответ достоен мастера gg=))
Джо (2006-10-12 19:22:00) [16]> Вопрос : "Почему появляется мессага с нецензурным содержанием"?
Потому, очевидно, что GetCurrentThread <> ChildThread.
i-am-vladko (2006-10-12 19:22:00) [17]p.s. parTh (он же ParentThread) - поток, запускающий ChildThread