Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
1-88437
KPbIC
2002-05-15 13:51
2002.05.27
LIB файлы, как с ними быть?


3-88349
kan2002
2002-04-30 15:37
2002.05.27
люди, кто сталкивался с компонентой ZReport?


4-88686
Толик
2002-03-28 10:56
2002.05.27
Иконка файла


7-88644
samos
2002-02-27 11:22
2002.05.27
Реестр или rundll32


1-88436
andrey_pst
2002-05-15 16:37
2002.05.27
формирование отчетов в Excel из программы на Delphi




   Наверх