Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.04 c
1-1109243025
DAT
2005-02-24 14:03
2005.03.13
Inline assembler code


1-1109333721
markers
2005-02-25 15:15
2005.03.13
Два вопроса по сети.


14-1108634914
Vaitek
2005-02-17 13:08
2005.03.13
Оптимизация вычислений


3-1108122773
denis24
2005-02-11 14:52
2005.03.13
проблема с firebird


14-1108983986
КаПиБаРа
2005-02-21 14:06
2005.03.13
По поводу <<Поле "Тема вопроса" не оформлено>>




   Наверх