Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

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

 
rimd   (2005-01-30 12:28) [0]

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


 
default ©   (2005-01-30 12:31) [1]

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


 
GuAV ©   (2005-01-30 12:42) [2]

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


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

Тогда как объяснить:
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) изменяет переменную как ему надо, а последующие потоки используют эту переменную в своих целя, но как-то странно получается, что они все равны этой переменной.

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


 
GuAV ©   (2005-01-30 12:44) [4]


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


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


 
default ©   (2005-01-30 12:45) [5]

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


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

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


 
default ©   (2005-01-30 12:58) [7]

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


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

Это точно


 
Cobalt ©   (2005-01-30 14:28) [9]

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


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

неа


 
Cobalt ©   (2005-01-30 19:30) [11]

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



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

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.583 c
1-1109423217
Толян
2005-02-26 16:06
2005.03.13
клиент сервер по базе данных


14-1108573257
Sour
2005-02-16 20:00
2005.03.13
Motorola mpx200


3-1108452396
DmitriyG
2005-02-15 10:26
2005.03.13
TBDECallBack + MSSQL


14-1109063793
Ega23
2005-02-22 12:16
2005.03.13
23 февраля посвещается...


4-1107241251
Mikola
2005-02-01 10:00
2005.03.13
Один сеан за день!