![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]у каждого потока есть своя локальная память до которой другим потокам нет доступа
так вот локальные переменные размещаются как раз в такой памяти