Win32 windows безопасен для работы с потоками? - PullRequest
5 голосов
/ 20 сентября 2011

Я хотел бы создать окно в одном потоке, а затем перенести HWND в один из любого числа потоков, в которых он будет выполняться. Моя программа будет иметь несколько таких окон. Возможно ли это, или Win32 API не предназначен для этого?

Ответы [ 4 ]

10 голосов
/ 20 сентября 2011

Да, в определенной степени.

Вы можете отправлять и публиковать сообщения в HWND из любой темы.

http://msdn.microsoft.com/en-us/library/ms644944(v=VS.85).aspx

Попытка настроить пользовательский интерфейс (например, добавить элементы управления) из другого потока закончится плохо.Однако, если вы отправите в свое окно сообщение, вы можете быть уверены, что сообщение будет обработано в цепочке создания.

6 голосов
/ 20 сентября 2011

Нет, это невозможно.Поток, который окно использует для своего цикла сообщений (то, что вы называете «выполнением в»), определяется во время создания окна.Вы можете создавать несколько потоков и запускать из них циклы сообщений (и, следовательно, создавать для них окна), но это обычно считается опасным.

2 голосов
/ 21 сентября 2011

Есть два важных вызова, которые должны вызываться из одного потока : CreateWindow и GetMessage (или их соответствующих эквивалентов).Ваше решение не будет, так что это неправильно.

Вы можете позвонить PostMessage в любой теме.SendMessage несколько опасно, так как блокируется в сценарии с несколькими потоками и может зайти в тупик.

2 голосов
/ 20 сентября 2011

Нет, проверка одновременности этих вызовов не производится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...