![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов процедуры из потока [D7]
3APA3A © (2004-07-03 19:03:00)У меня вот такая процедура
procedure Wait(Interval : Cardinal);
var hEvent : Cardinal;
begin
hEvent := CreateEvent(nil, True, True, nil);
WaitForSingleObject(hEvent, Interval);
CloseHandle(hEvent);
end;
Является ли она потокобезопасной? Я думаю, что да, но интересно послушать другие мнения...
P.S. вопрос даже не конкретно про мою процедуру, а вообще -
когда поток вызывает функцию, создаются ли ее локальные переменные в стеке для каждого потока или нет?
P.S.S. в довесок - чем threadvar отличается от var?
Polevi (2004-07-03 22:29:00) [1]http://www.delphimaster.ru/articles/localmem/index.html
3APA3A (2004-07-03 19:32:00) [2]Отсюда вытекает
что как только поток завершился нет никакой возможности узнать "его" значение threadvar-переменной
или
я ошибаюсь... можете поподробней рассказать про механизм thread local storage или заURLить меня куда-нибудь?
DrPass (2004-07-03 19:19:00) [3]Является.
P.S. Создаются
P.P.S. Глобальная переменная, объявленная как var, доступна для всех потоков
Переменная threadvar как бы создается в нескольких экземплярах - для каждого потока, т.е. является потокобезопасной. На самом деле threadvar представляет собой прозрачную для программиста оболочку над виндовым механизмом thread local storage, и потому доступ к таким "переменным" осуществляется намного медленнее, чем к обычным