Создание потоков, которые работают с диалоговыми окнами - PullRequest
1 голос
/ 09 июня 2011

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

Может кто-нибудь сказать мне, как это правильно реализовать это? Мне действительно нужно объявить статические элементы управления? Или есть другой способ сделать это?

Это ошибки (без статики)

error C2228: left of '.AddString' must have class/struct/union

со статическим:

unresolved external symbol "public: static class CListBox CsearchDlg::m_musicList" (?m_musicList@CsearchDlg@@2VCListBox@@A)

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

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

Примерно так (псевдокод):

CWinThread* thread = AfxBeginThread(
   MyClass::ThreadFunc,
   this);

MyClass::ThreadProc(LPARAM pParam)
{
    MyClass cls = dynamic_cast<MyClass*>(pParam);
    cls->RealThreadFunc();
};
1 голос
/ 09 июня 2011

Обычно не рекомендуется «трогать» интерфейс из вторичных потоков. Лучше оставить все взаимодействия с пользовательским интерфейсом основной теме и просто публиковать сообщения из дополнительной темы в основной.

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