ПРоблемы с многопоточностью
От: Hsilgos Беларусь  
Дата: 22.10.04 12:36
Оценка:
Привет, народ! Такая проблема:
У меня есть RichEdit.Я получаю его OLE-интерфейс, и вывожу на него картинку.
Ещё у меня 2 потока.
Так вот. Если я вывожу картинку в первом потоке — всё нормально. А если во втором — ошибка... Я точно знаю, что это из-за многопоточности приложения... Но в этом не силен. Может,кто сталкивался с подобной проблемой?? Код кидать не буду — очень обьемный.
ХОЙ!
Re: ПРоблемы с многопоточностью
От: Ed.ward Россия  
Дата: 22.10.04 12:45
Оценка:
Здравствуйте, Hsilgos, Вы писали:



H> Привет, народ! Такая проблема:

H>У меня есть RichEdit.Я получаю его OLE-интерфейс, и вывожу на него картинку.
H>Ещё у меня 2 потока.
H>Так вот. Если я вывожу картинку в первом потоке — всё нормально. А если во втором — ошибка... Я точно знаю, что это из-за многопоточности приложения... Но в этом не силен. Может,кто сталкивался с подобной проблемой?? Код кидать не буду — очень обьемный.

Смотри CoMarshalInterface

Мысль такая что указатель на COM интерфейс валиден только в том потоке где он был получен/создан

что бы использовать его из других потоков и используется CoMarshalInterface

Ed.ward
Re: ПРоблемы с многопоточностью
От: CybAng  
Дата: 22.10.04 13:01
Оценка:
H>У меня есть RichEdit.Я получаю его OLE-интерфейс, и вывожу на него картинку.
H>Ещё у меня 2 потока.
H>Так вот. Если я вывожу картинку в первом потоке — всё нормально. А если во втором — ошибка... Я точно знаю, что это из-за многопоточности приложения... Но в этом не силен. Может,кто сталкивался с подобной проблемой?? Код кидать не буду — очень обьемный.

при передаче ОЛЕ или СОМ объектов или ссылок необходимо использовать маршалинг.

CoMarshalInterThreadInterfaceInStream и CoGetInterfaceAndReleaseStream.
либо использовать GIT (Global Interface Table) посмотри в мсдн.
AMDG
Re: ПРоблемы с многопоточностью
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.10.04 14:09
Оценка: 2 (1)
Здравствуйте, Hsilgos, Вы писали:
H>У меня есть RichEdit.Я получаю его OLE-интерфейс, и вывожу на него картинку.
H>Ещё у меня 2 потока.
H>Так вот. Если я вывожу картинку в первом потоке — всё нормально. А если во втором — ошибка...

::CoInitialize() — то во втором потоке делал?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.