| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 16.07.2005
Адрес: Украина, г. Ровно
Пол: Male
Сообщения: 140
![]() |
Доступ из рабочего потока к интерфейсу
Народ такая проблема: прога под Винду на С\С++ на МФС, есть два потока основной он же интерфейсный то есть основная задача - отрисовка окон и рабочий там из MySQL сервера я витягиваю даные и запихаю в масивчик паралельно в том же потоке я пытаюсь добавить данные в окно вызивая ф-ю контролерра окна ( СMyDialog::AddRowInList(...) ) в лист контрол.
Прикол заключаетса в том что на проверке "есть ли окно?" ф-я ( BOOL IsWindow(HWND) ) видет FALSE типа мол окна нету но оно есть!!!! Да поток написан в стиле WinAPI и ето добавления в лист контррол единое что присутствует из MFC. Поток создаю через ВиньАПИ ф-ю CreateThread(...). Есть вариант что поток "не МФС" ( создан не через AfxBeginThread(...) ) и по етому немогу нормально работать с окнами. Помогите может кто уже с таким сталкивался?! |
|
|
|
|
# 2 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
A как вы в потоке получаете (или передаете туда) HWND диалога?
Если вы пытаетесь получить указатель на диалог в другом потоке по его HWND то запросто можно получить указатель на временный объект вместо указателя на диалог. Что- то вроде CWnd* pWnd = CWnd::FromHandle(hwnd); СMyDialog* pDlg = (СMyDialog*)(pWnd); Если такой код выполнить в другом потоке ( не в потоке в котором был создан диалог) то вы можете получить указатель на временный объект. В MFC есть понятие Thread State. Сделайте поиск по "Thread State" в MSDN, может найдете объяснение это проблеме. Я бы сделал следующее : из потока посылал бы диалогу месседжи со стрингами которые нужно добавить в окно. То-есть в LPARM или WPRAM, помещал бы указатель на стриг. Причем лучше не пользоваться в этом случае CString-ом, а мессадж посылать SendMessageTimeout. А в диалоге написал бы обработчик этого месседжа, в котором бы вынимал стринг из параметра и добавлял бы его в окно
__________________
Best Regards |
|
|
|
|
# 3 |
|
Junior Member
Регистрация: 16.07.2005
Адрес: Украина, г. Ровно
Пол: Male
Сообщения: 140
![]() |
2 alexey_ma:
В поток я передаю как параметр указатель на структурку которую заполняю в интерфейсном потоке где и есть HWND окна. Я уже думал про меседжи окну но есть одно но: мне нужно знать точно когда будет закончена вставка стриги в лист контрол... для того что бы отобразить процес в прогрес-баре. |
|
|
|
|
# 8 | |
|
::VIP::
Регистрация: 22.06.2005
Адрес: 45°00' N / 41°55' E 26rus
Пол: Male
Сообщения: 1 331
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
читай правила правила ![]() Удачи!
__________________
"Люблю круглые даты: 16, 32, 64..." |
|
|
|