Главная страница
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.009 c
4-88691
pasha_golub
2002-03-26 16:14
2002.05.27
Передача текста в чужое окно


6-88578
boomer
2002-03-15 23:43
2002.05.27
Плиз срочно горю на дипломе Как определить IP и Mac адресс


3-88341
Novak
2002-04-30 13:42
2002.05.27
LookUpListBox! что-то нехочет работать как я хочу!


1-88533
adav
2002-05-15 11:28
2002.05.27
Invalid floating point operation. Не могу разобраться


8-88568
Val
2001-12-27 10:48
2002.05.27
ClipBoard->JPEGImage