Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1156855026
pic509
2006-08-29 16:37
2006.10.29
Как передать в Хранимую процедуру параметр=null


1-1158261697
oxffff
2006-09-14 23:21
2006.10.29
ВDS 2006 тоже не поддерживает custom variant byRef


6-1142597804
Sollo
2006-03-17 15:16
2006.10.29
Upload файла на сервер


2-1160890421
ctudent
2006-10-15 09:33
2006.10.29
Работа с компонентами в Run-Time


6-1149170784
Steplerr
2006-06-01 18:06
2006.10.29
Докачка FTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский