Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
ВнизКак защитить переменные в потоке? Найти похожие ветки
← →
Aleksandr (2002-03-21 14:49) [0]Уважаемые коллеги!
Может, я чего-то с методом тыка не понимаю...
Внутри Execute потока у меня есть переменная типа TMemoryStream, которая загружает информацию и передается в качестве параметра в создаваемый там же другой поток:
M:=TMemoryStream.Create;
Thread.Connection.ReceiveStream(M); //Thread - это переменная, которой и принадлежит Execute
with TUpdateProcessor.CreateOnStream(true,M) do begin //истчо один поток
FreeOnTerminate:=false;
UpdateType:=utRemoteUpdate;
Resume;
WaitFor;
UpdateResult:=UpdateType;
Free
end;
Суть проблемы в том, что потоков, выполняющих этот код, может быть несколько, и, хотя М является локальной переменной, при трассировке программы она после передачи в TUpdateProcessor уже в его теле принимает значения, которые считывает из сокета другой экземпляр Thread. Другой пример: в этом же коде все время ведется лог в текстовый файл, открытый fmOpenReadWrite or fmShareDenyNone. В этот лог разные экземпляры потока тоже одновременно рисуют, то есть вместо
14:40:10: Обработка обновлений 0001...
14:40:11: Обработка 0001 успешно завершена
14:40:12: Обработка обновлений 0002...
14:40:13: Обработка 0002 успешно завершена
пишется
14:40:10: Обработка обновлений 0001...
14:40:11: Обработка обновлений 0002...
14:40:12: Обработка 0001 успешно завершена
Попробовал я засунуть код в рамки CriticalSection, дык он тогда вообще просто умирает. В чем тут смысл жизни?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c