Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c