Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

потоки...


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо