![]() |
|
![]() ![]() ![]() |
|
2faust |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
все привет.
тут столкнулся с маленькой проблеммой. когда передаю данные на форму, дальше при появлении формы выскакивает ошибка. проблема наверное заклячается в том, что не передаю адресс родителя в форму. а как надо правильно сделать? если данные на форму не передавать форма появляется без всяких проблем. вот пример :
|
||||||
|
|||||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что-то я не заметила, что ты что-то передаешь... скорее сообщаешь о заполнении глобальной переменной, так что ли? Вот так делать нехорошо: объекты CWnd валидны только в создающем их потоке. Часть функций может ругаться ассертами. Опять же, первая функция и последняя являются обработчиками одного и того же класса-окна. Поэтому по-любому выполняются в одном потоке. Где тут передача из потока в поток? Еще, поток ты создаешь рабочий, но пытаешься создать в нем окно и запустить модальный цикл. Тоже неправильно. Ты описал бы постановку задачи, чтобы можно было конкретно советовать. -------------------- ... |
|||
|
||||
2faust |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
добрый.
дело в том что у меня есть основные потоки и рабочие потоки. в основном потоке запускаю ф-цию CX::OnButton1(), та в свою очередь запускает рабочий поток ::AfxBeginThread(InitDialog, ...) смысл которого явл-ся передать форму в отдельную нить. дальше в эту нить мне надо передавать данные из основного потока ч\з ф-цию CX::OnMessageTransferData(), в которой формирую данные. в основном потоке диалог. модальн. окно не могу запускать так же как и использов. ф-цию CX::OnMessageTransferData() их работу будет блокировать waitforsingleobject в основном потоке.
с этим я конечно переборщил. был не прав. пытаюсь передать сообщение с основоной же поток. Это сообщение отредактировал(а) 2faust - 13.7.2009, 14:06 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Еще раз повторю: окна нормально работают только в специальный потоках (не помню название) но никак не в рабочих! Поток с окном должен иметь цикл обработки сообщений... Можно, конечно, попробавать запустить в рабочем потоке модальный цикл, но это какой-то ущербный вариант. Хочешь окно в отдельном потоке - создавай правильный поток. -------------------- ... |
|||
|
||||
2faust |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
2 Earnest
я буду вам очень благодарен за помощь если вы приведете отдельный пример, как реализовать для отдельного окна в рабочем потоке цикл обработки сообщений. за неимением опыта не знаю как это реализовать. ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В рабочем потоке нельзя реализовать цикл обработки сообщений, на то он и рабочий, т.е. управляется однй процедурой.
UI-поток тоже запускается функцией AfxBeginThread, но ее вторым вариантом - где первым параметром стоит CRuntimeClass*. Предполагается, что это класс объекта производного от CWinThread, в котором и критится цикл обработки сообщений. Примера под рукой нет. Почитай в MSDN статью "Multithreading: Creating User-Interface Threads". -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |