Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
7-88652
Zool
2002-02-25 10:45
2002.05.27
Drivers


1-88416
Fighter
2002-05-15 06:31
2002.05.27
Обработка строк по маске


6-88573
Di_wind
2002-03-08 22:10
2002.05.27
HTTPS


1-88410
Lit_Bogdan
2002-05-17 00:06
2002.05.27
График типа DBChart


3-88328
RedKat
2002-04-29 18:10
2002.05.27
Создание DSN





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский