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

Вниз

Help me! Stream & Thread   Найти похожие ветки 

 
eSKey   (2002-05-15 10:39) [0]

СРочно нужна ваша помощь! У меня такой код:
//основной Thread
//ZSavefile - TCompressionStream (Zlib)
//DataChunk - динамический массив
//ActSize - его размер
//QBName -имя файла

TmpStream:=TMemoryStream.Create;
ZSavefile:=TCompressionStream.Create(clDefault,TmpStream);
ZSavefile.Write(DataChunk[0],ActSize);
ZSavefile.Free;
DiskFile:=TFileStream.Create(QBName,fmCreate or fmShareDenyWrite);
with TServThread.Create
(hPwd,TmpStream ,DiskFile)
do OnTerminate:=DoneCrypt;

//TServThread = class(TThread) (запускаемый Thread)
//он получает как параметры два стрима, и в зависимости от
//содержимого inStream выполняет нек-рые действия
//HPos - вычисляемая позиция определенных данных
//sbuf - string
constructor TServThread.Create
(inStream:TStream; outStream:TStream);

iSize:=inStream.Size;
HPos:=iSize-sizeof(ChkStr)-sizeof(integer)-2;
if HPos<0 then exit;
oStream:=outStream;
inStream.Seek(HPos,soFromBeginning);
inStream.Read(sbuf[1],2);

На последней строке вылетает эксепшн AV: Reading from adress...
Во время отладки если всплывающий хинт дает inStream.Size=0, однако iSize=5600, и HPos вычисляется правильно.
Я первый раз делаю многопотоковый проект, да и в ZLib раньше юзал не компресстрим, а компрессбуфер, так что не знаю где копать...
Помогите плз, диплом горит!


 
eSKey   (2002-05-15 10:42) [1]

Дополнение: сорри, выкинул в примере конструктора 1-й параметр hPwd, это хэш пароля, просто до него процесс все равно не доходит...


 
MBo   (2002-05-15 10:47) [2]

длину строки sbuf заранее задаешь Setlenght?


 
Anatoly Podgoretsky   (2002-05-15 10:58) [3]

Состояние sbuf не известно, ни где описана, ни сколько в ней символов текущий момент.
Парень ты очень рисковый конечно.


 
eSKey   (2002-05-15 12:02) [4]

хм, возможно... писал-то в час ночи, все может быть! То есть других возможных причин нет?


 
eSKey   (2002-05-15 15:55) [5]

Чуть не забыл еще один вопрос:
В приведенном коде проверяется размер потока (см.) и если он слишком мал я делаю exit. Но гложут сомнения - корректно ли это делать в конструкторе? Exit вызывается до inherited конструктора, еще я в Execute на всякий случай проверяю специальную переменную (код не привожу, там все очевидно). Короче - можно ли завершать тред в Create?



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
1-88518
Demon Ltd
2002-05-16 02:00
2002.05.27
Копирование файлов


14-88592
ATLANTIDO
2002-04-17 00:00
2002.05.27
Не понимаю ...


1-88407
vvedensk
2002-05-16 14:07
2002.05.27
Преобразование color в цвет html....


1-88395
hooky-mars
2002-05-14 21:56
2002.05.27
Глюк при Length(Form1.RichEdit1.Lines.Text)


1-88475
Саша
2002-05-18 07:48
2002.05.27
Как определить запущена программа или нет?