Создание Windows и Threading - C ++ - PullRequest
1 голос
/ 20 ноября 2010

Когда новое окно создается с использованием CreateEx, выполняется ли его код в своем собственном потоке или в его родительском (т. Е. В потоке, в котором выполнялся его экземпляр)?Благодаря.

Ответы [ 5 ]

7 голосов
/ 20 ноября 2010

Окно на самом деле не выполняет какой-либо код самостоятельно, весь код вызывается из цикла сообщений, который является частью вашего собственного кода. Вы можете столкнуться с огромными проблемами, пытаясь взаимодействовать с пользовательским интерфейсом Windows несколькими потоками, поэтому вы всегда должны отвечать на сообщения в одном потоке.

3 голосов
/ 20 ноября 2010

В Windows есть сродство потоков - см. Статью Рэймонда Чена по этому вопросу.

2 голосов
/ 20 ноября 2010

CreateWindowEx () не создает новый поток.Если вам нужен новый поток, вы должны вызвать либо _beginthreadex () (обычно предпочтительнее), либо CreateThread () .

В случае, если вам интересно, _beginthreadex() предпочтительнее CreateThread(), потому что первый инициализирует части CRT, а второй нет.

1 голос
/ 20 ноября 2010

Нет, окно создания не запускает новую тему

0 голосов
/ 20 ноября 2010

Многопоточные графические интерфейсы обычно заканчиваются катастрофой.Библиотеки Windows активно препятствуют этому, генерируя исключения.

Даже если бы это было разрешено, CreateWindowEx не смог бы сделать это по умолчанию, поскольку он делал бы очень большие предположения относительно вашего кода (блокировки, безопасность потоков и т. Д.);и большинство разработок для Windows, вероятно, все еще по существу однопоточны.

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