Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
1-1109571142
Oleg_K
2005-02-28 09:12
2005.03.13
Как обьявить событие при создании компоненты


1-1109323510
Dysan
2005-02-25 12:25
2005.03.13
большие числа


8-1101130602
Axer
2004-11-22 16:36
2005.03.13
Ещё вопросик по BASS.DLL


4-1106842004
cLayDEr
2005-01-27 19:06
2005.03.13
Перехват траффика сети и инета


3-1108060910
Step[B.M.]
2005-02-10 21:41
2005.03.13
Как заставить FireBird сортировать кирилицу по "человечески"?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский