Вызов функции нестатического класса в другом потоке - PullRequest
2 голосов
/ 23 марта 2011

Я переписываю некоторый код, который я написал давным-давно. Код - это класс, который запускает другой рабочий поток с AfxBeginThread. Когда поток заканчивается, он должен вернуть свою работу вызывающему классу.

На самом деле, когда поток заканчивается, он отправляет сообщение по PostMessage со своими результатами в вызываемый класс. Но этот путь действительно зависит от MFC, и для этого мой класс должен реализовать все компоненты MFC.

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

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Вместо того, чтобы пытаться вызывать метод напрямую (что вызовет целый новый набор собственных проблем с потоками), попробуйте использовать собственный Win32 ::PostMessage() вместо реализации той же функции в MFC.Любой поток может вызвать ::PostMessage(), чтобы безопасно доставить сообщение в другой поток.

0 голосов
/ 23 марта 2011

Звучит так, как будто вы хотите использовать обычные примитивы потоков, а не примитивы обмена сообщениями в окне.

Какую версию AfxBeginThread вы используете?Если вы передадите ему экземпляр класса, вы сможете получить доступ к членам этого класса напрямую, как только узнаете, что он завершил работу.Если вы передали ему указатель на функцию, вы можете передать любой указатель класса с параметром lParam, а затем использовать его в качестве коммуникационного контекста.

Вы просто хотите убедиться, что при доступе к классу вы делаете это потокобезопасным способом.Если вы дождетесь окончания потока, все будет в порядке.В противном случае вы можете использовать критические разделы или мьютексы.Дополнительную информацию смотрите в статье MSDN о примитивах синхронизации потоков .

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