Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.04;
Скачать: CL | DM;

Вниз

Небольшая проблема с потоком...   Найти похожие ветки 

 
Ксардас ©   (2005-08-13 21:44) [0]

Короче создал я поток,который должен грузить офигенное кол-во инфы в РичЭдит.В общем загрузка происходит нормально,но по ёё окончании выводится сообщение об ошибке:

Project Project2.exe raised exception class EAccessViolation with message "Access violation at address 74DF3CB9 in module "RICHED20.dll". Read of address 6C840002". Process stopped. Use Step or Run to continue.

Что ЭТО обозначает и что можно сделать?


 
begin...end ©   (2005-08-13 21:48) [1]

Приведите код загрузки офигенного кол-ва инфы в РичЭдит.


 
Eraser ©   (2005-08-13 21:49) [2]

Ксардас ©   (13.08.05 21:44)

Визуальные копоненты из VCL по своей природе не потоко-безопасны,  т.е. к ним можно обращаться только в контексте основного потока.


 
Ксардас ©   (2005-08-13 22:05) [3]

begin
ct:=0;
adress:=0;
TestForm.Memo1.Lines.LoadFromFile("C:\TestLoader\Data\LastFile.last");
TestForm.RichEdit1.Clear;
TestForm.N6.Enabled:=true;
TestForm.ToolButton4.Enabled:=true;
begin
TestForm.RichEdit1.Clear;
assignfile(f,TestForm.Memo1.Text);
reset(f,1);
ct:=0;
while not eof(f) do begin
blockread(f,MyArray,1);
ct:=ct+1;
end;
reset(f,1);
blockread(f,MyArray,ct);
closefile(f);
end;
for i:=0 to (ct div 16 )do begin
AdrStr:="";
HexStr:="";
SmvStr:="";
FinalString:="";
Adress:=Adress+16;
AdrStr:=IntToHex(Adress-16,8)+"   ";
for j1:=1 to 16 do begin
if j1=9 then HexStr:=HexStr+" -";
HexStr:=HexStr+" "+IntToHex(MyArray[i*16+j1],2);
if j1=16 then HexStr:=HexStr+"  ";
if char(MyArray[i*16+j1])=#000 then SmvStr:=SmvStr+"." else
SmvStr:=SmvStr+char(MyArray[i*16+j1]);
end;
FinalString:=AdrStr+HexStr+SmvStr+#13#10;
TestForm.RichEdit1.Text:=TestForm.RichEdit1.Text+FinalString;
end;
end;

Примерно так


 
GanibalLector ©   (2005-08-13 22:09) [4]

2 Ксардас ©   (13.08.05 22:05) [3]
Что это??? Это код потока??? Если да,то читаем Eraser ©   (13.08.05 21:49) [2]


 
Наиль ©   (2005-08-13 22:11) [5]

Подозрительная строчка.
blockread(f,MyArray,ct);
Какого размера MyArray?


 
Ксардас ©   (2005-08-13 22:12) [6]


> Подозрительная строчка.
> blockread(f,MyArray,ct);
> Какого размера MyArray?

0..800000


 
Ксардас ©   (2005-08-13 22:12) [7]


> Визуальные копоненты из VCL по своей природе не потоко-безопасны,
>  т.е. к ним можно обращаться только в контексте основного
> потока.

можно поподробнее?


 
Eraser ©   (2005-08-13 23:33) [8]

Ксардас ©   (13.08.05 22:12) [7]
можно поподробнее?


Как я уже говорил VCL не потоко-безопасна, т.е. эта библиотека изначально разрабатывалась для работы с ней только из основного потока пролижения. Восновном это связано с тем, что графические ф-ии в VCL не защищены объектами синхронизации (критическая секция, мьютекс и т.д.).
Поэтому чтобы взаимодействовать с VCL из другого потока существует метод Synchronize (см. справку - F1). Хотя он "пожирает" довольно много ресурсов... иногда выгоднее использовать сообщения (Send/PostMessage + F1).
В некоторых случаях можно обойти проблемы взаимодействия с визуальными компонентами, защитив обращения к ним, критическими секциями, например... но это можно делать далеко не во всех компонентах и далеко не всегда.


 
AlexWlad ©   (2005-08-14 11:38) [9]

Это HEX-viewer ?


 
Eraser ©   (2005-08-14 14:16) [10]

AlexWlad ©   (14.08.05 11:38) [9]

Где?



Страницы: 1 вся ветка

Текущий архив: 2005.09.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
8-1114091208
Skorii
2005-04-21 17:46
2005.09.04
вопрос про изображения.....


14-1123656431
ocean
2005-08-10 10:47
2005.09.04
Подбросьте формулировок о неисправностях компьютера


14-1123931672
Holy
2005-08-13 15:14
2005.09.04
Гароль Голд "Тайна кода да Винчи"


4-1121521309
F_Y
2005-07-16 17:41
2005.09.04
событие на запуск exe файла


14-1123743923
syte_ser78
2005-08-11 11:05
2005.09.04
Вопрос по нокиа 3100