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

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

CreateThread-совместное использование кода


rimd ©   (2005-01-30 12:28:00) 

Возникла проблемма при использовании CreateThread, в качестве стартового адреса указал адрес функции, но проблемма в том, что нужно запустить несколько НИТЕЙ, которые используют одну и ту же функцию. Как избежать совместного использования локальных переменных этой функции?


Cobalt   (2005-01-30 19:30:00) [1]

Вот так вот:
function ThreadProc(lpVoid:PCardinal) :Longword;stdcall;


Максим   (2005-01-30 17:42:00) [2]

неа


Cobalt   (2005-01-30 14:28:00) [3]

2 Максим
А у тебя, случаем, переменная не указана, как константа с начальным значением?


Максим   (2005-01-30 13:09:00) [4]

Это точно


default   (2005-01-30 12:58:00) [5]

потоки взяли переменную на поруки:)


Максим   (2005-01-30 12:54:00) [6]

Это конечно здорово, что у каждого потока свой стек, но результат на лицо...


default   (2005-01-30 12:45:00) [7]

в каких целях?
у них она своя


GuAV   (2005-01-30 12:44:00) [8]


> Первый поток (i=0) изменяет переменную как ему надо, а
> последующие потоки используют эту переменную в своих
> целя


Эта переменная своя для каждого потока, именно потому что она локальная.


GuAV   (2005-01-30 12:42:00) [9]

... и эта самая локальная память называется "стэк потока".


Максим   (2005-01-30 12:42:00) [10]

Тогда как объяснить:
function ThreadProc(lpVoid:Cardinal):Cardinal
var
 peremen:Cardinal;
begin
// Какой-то код
end;

for i:=0 to n do
begin
CreateThread(nil,0,@ThreadProc,nil,0,TPData[i].id);
//сдесь ждем к примеру пол секунды
end;

Первый поток (i=0) изменяет переменную как ему надо, а последующие потоки используют эту переменную в своих целя, но как-то странно получается, что они все равны этой переменной.

Я же не просто так вопрос поднял! Реальная проблемма...


default   (2005-01-30 12:31:00) [11]

у каждого потока есть своя локальная память до которой другим потокам нет доступа
так вот локальные переменные размещаются как раз в такой памяти


Наверх

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