![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Help me! Stream & Thread
eSKey © (2002-05-15 10:39:00)СРочно нужна ваша помощь!У меня такой код:
//основной 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 15:55:00) [1]Чуть не забыл еще один вопрос:
В приведенном коде проверяется размер потока (см.) и если он слишком мал я делаю exit. Но гложут сомнения - корректно ли это делать в конструкторе? Exit вызывается до inherited конструктора, еще я в Execute на всякий случай проверяю специальную переменную (код не привожу, там все очевидно). Короче - можно ли завершать тред в Create?
eSKey (2002-05-15 12:02:00) [2]хм, возможно... писал-то в час ночи, все может быть! То есть других возможных причин нет?
Anatoly Podgoretsky (2002-05-15 10:58:00) [3]Состояние sbuf не известно, ни где описана, ни сколько в ней символов текущий момент.
Парень ты очень рисковый конечно.
MBo (2002-05-15 10:47:00) [4]длину строки sbuf заранее задаешь Setlenght?
eSKey (2002-05-15 10:42:00) [5]Дополнение: сорри, выкинул в примере конструктора 1-й параметр hPwd, это хэш пароля, просто до него процесс все равно не доходит...