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

Вниз

Допустимы ли для нормальной работы такие действия с объектом?   Найти похожие ветки 

 
Aleksandr.   (2004-07-29 16:08) [0]

Внутри метода потомка от TThread TThread1 создается объект Object1. В этом же методе он через параметр передается в метод потомка от TThread TThread2, находящемся в состоянии WaitForSingleObject, где Event для WaitForSingleObject устанавливается и объект Object1 освобождается. Насколько допустимо так манипулировать объектами и потоками?


 
Юрий Зотов ©   (2004-07-29 16:12) [1]

IMHO, нормально.


 
Aleksandr.   (2004-07-29 16:28) [2]

Тогда нифига не понимаю. У меня периодически при попытке это сделать возникает Access Violation, причем сколько в DT ни трассируешь, все объекты ассигнуты. Ощущение, что кто-то где-то в RT за кем-то не успевает...


 
panov ©   (2004-07-29 16:37) [3]

... Event для WaitForSingleObject устанавливается и объект Object1 освобождается....

1. А в это время TThread2 начинает работать с Object1.
2. Thread1 успевает выполнить уничтожение объекта до того, как Thread2 закончит с ним работать.

Это например.

А без кода мало что можно сказать...


 
Юрий Зотов ©   (2004-07-29 17:17) [4]

> Aleksandr.   (29.07.04 16:28) [2]

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

AV возникает, вероятно, потому что после уничтожения объекта к нему идут обращения (из любого потока). То, что переменная ассигнута, еще ни о чем не говорит - если Вы ее значение не меняли, то оно само по себе и не изменится. Будет просто битая ссылка, которая и даст AV. Используйте FreeAndNil вместо простого Free и пройдите отладчиком - вот тогда и проверяйте, что там ассигнуто, а что нет.



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

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

Наверх




Память: 0.47 MB
Время: 0.027 c
3-1090442388
chirchik
2004-07-22 00:39
2004.08.15
изменения не принимаются (запрос с параметрами)


1-1091028513
Вопрос
2004-07-28 19:28
2004.08.15
Как масштабировать график (TChart) по заданным границам?


14-1091181051
igorr
2004-07-30 13:50
2004.08.15
Поиск телефона теперь невозможен


1-1091091662
tria
2004-07-29 13:01
2004.08.15
Как вызвать виртуальный перекрытый метод предка?


1-1091291959
Antonmm
2004-07-31 20:39
2004.08.15
RichEdit.Modified