Главная страница
    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.04 c
1-1109420012
ser35
2005-02-26 15:13
2005.03.13
как отобразить данные комбобоксов?


6-1104455235
nsvi
2004-12-31 04:07
2005.03.13
Отправка письма на через сервер smtp, требующий авторизации


14-1108901707
Antonn
2005-02-20 15:15
2005.03.13
Фото Винни-Пуха :)


4-1107014004
Остановка колеса фортуны?
2005-01-29 18:53
2005.03.13
Остановка колеса фортуны?


14-1108879176
begin...end
2005-02-20 08:59
2005.03.13
С Днём рождения! 20 февраля





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский