Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

потоки...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
15-1160337409
ArtemESC
2006-10-08 23:56
2006.10.29
Winamp 5


15-1160479002
Alexey 12
2006-10-10 15:16
2006.10.29
Ввод текста из документа


1-1158215092
Mishenka
2006-09-14 10:24
2006.10.29
Как сделать, чтоб в DBGridEh (из EhLib)


3-1157479783
DBE
2006-09-05 22:09
2006.10.29
paradox на другом компе


2-1160820429
fihi
2006-10-14 14:07
2006.10.29
кол-во времени (Integer), в формат даты