Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Вниз

TThread.ThreadID - уникальность после завершения потока   Найти похожие ветки 

 
Nomad.kz   (2002-11-07 16:22) [0]

Кто-нибудь знает ответ по теме? Поясняю, если непонятно:
Имеем поток, который нормально (или ненормально, т.е. по Terminate, по исключению и т.д.) завершается, т.к. FreeOnTerminate:=true. Может ли у нового потока поле ThreadID проинициализироваться значением завершенного потока?


 
VaS   (2002-11-07 16:26) [1]

Да.


 
Alex4444444444   (2002-11-07 16:34) [2]

ThreadID? A razve on ne systemoj naznachaetsya?


 
Игорь Шевченко   (2002-11-07 16:40) [3]

Может


 
Nomad.kz   (2002-11-07 16:44) [4]

Да, назначается системой, при вызове CreateThrread. Если после завершения потока ThreadID не уникально, то тогда непонятно, почему используется практика сравнения ThreadID после завершения потока, приведу пример:

TCl = class( TForm )
begin
th:TThread;
bThActive:boolean;

...
procedure GetMsg(var Msg:Message);message WM_USER+1;
end;

TCl:GetMsg(var Msg:Message);
begin
if bThActive and (th.ThreadID=cardinal(Msg,lParam)) then
...
end;


имхо, не факт то, что обработчик GetMsg выполнится до завершения потока, т.к. сообщение может быть послано при помощи PostMessage, а в деструкторе может выполняться еще что-нибудь, занимающее время (хотя бы ожидание дочернего потока данного потока). Может быть во время существования потока выделяемые потокам ThreadID уникальныо все-таки?


 
Nomad.kz   (2002-11-07 16:46) [5]

Может быть во время существования потока выделяемые потокам ThreadID уникальныо все-таки?

пардон, оговорился, во время существования процесса


 
Alex4444444444   (2002-11-07 16:57) [6]

Pardon za moj post, ya ne pravil"no ponyal pervonachal"nyj vopros.


 
Игорь Шевченко   (2002-11-07 17:14) [7]


> if bThActive and (th.ThreadID=cardinal(Msg,lParam)) then


Исходя из этой строки можно предположить, что поток все-таки активен...

Еще раз - после завершения потока уникальность ThreadId в системе не гарантирована.


 
Nomad.kz   (2002-11-07 17:42) [8]

хорошо, например, ситуация:
поток th уже завершился, обрабатывается его выходное сообщение. Новый поток уже создан, предположим, что он получил тот же ThreadID, что и th, тогда:

TCl:GetMsg(var Msg:Message);
begin
if bThActive and (th.ThreadID=cardinal(Msg,lParam)) then
bThActive:=false;
end;


и возникает ситуация, если обработка завершения второго потока произойдет быстрее, чем обработка первого (th). Или это надуманная ситуация и такого произойти не может в принципе?

2Игорь Шевченко ©
Вы уверены в своем мнении или это Ваша интуиция?


 
Юрий Зотов   (2002-11-07 18:35) [9]

Это не мнение и не интуиция. Это знание.

Из справки:
The identifiers are valid from the time the thread is created until the thread has been terminated.

Из Рихтера:
После завершения потока или процесса его идентификатор может использоваться повторно для других потоков или процесов.


 
Alex4444444444   (2002-11-07 18:41) [10]

U Thread"a est" parameter, cotoryj VY zadaete. Ispol"zujte ego kak identificator.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-59272
iNew
2002-11-07 14:50
2002.11.18
Как лучше всего заменить все ‘*’ в строке на ‘%’, можно конечно


1-59213
irmantukas
2002-11-06 00:54
2002.11.18
StringGrid


14-59421
Esipenko
2002-10-31 12:10
2002.11.18
Пароль на вход в Win98


1-59158
The_Vizit0r!
2002-11-08 22:22
2002.11.18
Эмуляция клика мышки


3-59044
John13
2002-10-29 12:40
2002.11.18
Мощная заморочка для знатоков SQL! Помогите плз





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский