создаю поток: Код (Text): void Thread(PPARAMETRS pParametrs) { SendMessage(GetDlgItem(pParametrs->hWnd,IDC_EDIT9),WM_SETTEXT,5,(LPARAM)"hello"); // или SetDlgItemText(pParametrs->hWnd,IDC_EDIT9,"hello"); } //... CreateThread(0,0,(PTHREAD_START_ROUTINE)Thread,&pr,CREATE_DEFAULT_ERROR_MODE,0); В итоге всё это подвисает при выводе текста(функция SendMessage или SetDlgItemText не возвращает управления). Почему так происходит - ведь они работают в одном адресном пространстве. Как иначе вывести текст?
gevara Попробуй PostMessage/SendMessageTimeout вместо SendMessage. Мало информации, чтобы определить возможна ли взаимная блокировка.
в главном потоке WaitForMultipleObjects (вообще предполагалось что потоков будет несколько, но я пока отрабатываю на одном). Я не думаю что причина в этом. Точнее я бы даже спросил так: может ли поток, созданный функцией DlgProc отправлять сообщение SendMessage? Если да - значит ошибка в коде. Причём код я перерыл - прогнал под олькой. хендл окна правильный.
PostMessage(GetDlgItem(pParametrs->hWnd,IDC_EDIT9),WM_SETTEXT,5,(LPARAM)"hello"); так по идее программа должна продолжиться, не ожидая пока очередь сообщений окну будет обработана. Вродь у Рихтера что-то было на эту тему...
Если посылаешь месседж потоку который стоит по WaitForXXXObject то так и должно быть. Чтобы обработать твой месседж поток должен крутится внутри GetMessage/TranslateMessage/DispatchMessage.