![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Допустимы ли для нормальной работы такие действия с объектом? [D7, WinXP]
Aleksandr. © (2004-07-29 16:08:00)Внутри метода потомка от TThread TThread1 создается объект Object1. В этом же методе он через параметр передается в метод потомка от TThread TThread2, находящемся в состоянии WaitForSingleObject, где Event для WaitForSingleObject устанавливается и объект Object1 освобождается. Насколько допустимо так манипулировать объектами и потоками?
Юрий Зотов (2004-07-29 17:17:00) [1]> Aleksandr. (29.07.04 16:28) [2]
Ваша задача - обеспечить, чтобы до создания объекта и после его уничтожения к нему не было никаких обращений. Как именно Вы это сделаете, в каком потоке будете создавать и в каком уничтожать, будете ли что-то синхронизировать, или нет - это совершенно неважно.
AV возникает, вероятно, потому что после уничтожения объекта к нему идут обращения (из любого потока). То, что переменная ассигнута, еще ни о чем не говорит - если Вы ее значение не меняли, то оно само по себе и не изменится. Будет просто битая ссылка, которая и даст AV. Используйте FreeAndNil вместо простого Free и пройдите отладчиком - вот тогда и проверяйте, что там ассигнуто, а что нет.
panov (2004-07-29 16:37:00) [2]... Event для WaitForSingleObject устанавливается и объект Object1 освобождается....
1. А в это время TThread2 начинает работать с Object1.
2. Thread1 успевает выполнить уничтожение объекта до того, как Thread2 закончит с ним работать.
Это например.
А без кода мало что можно сказать...
Aleksandr. (2004-07-29 16:28:00) [3]Тогда нифига не понимаю. У меня периодически при попытке это сделать возникает Access Violation, причем сколько в DT ни трассируешь, все объекты ассигнуты. Ощущение, что кто-то где-то в RT за кем-то не успевает...
Юрий Зотов (2004-07-29 16:12:00) [4]IMHO, нормально.