Многопоточность MFC: AfxBeginThread против Boost.Thread? - PullRequest
1 голос
/ 19 октября 2011

У меня есть приложение MFC, в которое я хочу включить многопоточность. Изначально я думал об использовании Boost.Thread из-за общей простоты разработки с boost. Тем не менее, мне интересно, есть ли какие-то ошибки, и если я должен использовать AfxBeginThread, чтобы быть безопасным в контексте MFC?

Ответы [ 6 ]

1 голос
/ 18 сентября 2017

Просто включите следующий заголовочный файл, и проблем не должно быть:

#include <boost/thread/win32/mfc_thread_init.hpp>
#include <boost/thread.hpp>
1 голос
/ 22 октября 2011

Я нашел эту статью Microsoft: Многопоточность: советы по программированию . Там написано:

Доступ к объектам MFC из потоков, не относящихся к MFC

Если у вас есть многопоточное приложение, которое создает поток способом кроме использования объекта CWinThread, вы не можете получить доступ к другому MFC объекты из этого потока. Другими словами, если вы хотите получить доступ к любому MFC объект из вторичного потока, вы должны создать этот поток с один из методов, описанных в многопоточности: создание Потоки пользовательского интерфейса или многопоточность: создание рабочих потоков. Эти методы являются единственными, которые позволяют библиотеке классов инициализировать внутренние переменные, необходимые для обработки многопоточных приложения.

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

1 голос
/ 20 октября 2011

Одним из преимуществ использования boost::thread является то, что его интерфейс напоминает std::thread. Однако есть несколько отличий. Если вы в конечном итоге захотите использовать std::thread, boost::thread будет простым переходом.

1 голос
/ 20 октября 2011

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

Также проверьте сайт MSDN для параллельного программирования для получения более подробной информации.

0 голосов
/ 28 января 2014

В то время, когда я пишу это, это все еще небезопасно из-за этой проблемы в Boost.Thread:

http://boost.2283326.n4.nabble.com/Fwd-Thread-Solution-to-conflict-with-MFC-td3477977.html

(короткая версия, которую любой, кто пробует, обнаруживает достаточно быстро: простосвязывание с Boost.Thread вызывает утверждения при инициализации MFC)

0 голосов
/ 22 октября 2011

Если у вас есть проект MFC, пожалуйста, НЕ вводите надбавку к нему. Используйте MFC API, где вы можете. Так как в нем есть что-то для поддержки многопоточности, вам действительно не нужна одна дополнительная библиотека (особенно boost) для этого.

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