Поделиться через


Реализация многопоточности на языке C++ с помощью классов MFC

Библиотека класса Microsoft Foundation (MFC) обеспечивает поддержку многопоточных приложений. В этом разделе описываются процессы и потоки и подход MFC к многопоточности.

Процесс — это исполняемый экземпляр приложения. Например, при двойном щелчке значка Блокнот запускается процесс, который запускается Блокнот.

Поток — это путь к выполнению в процессе. При запуске Блокнот операционная система создает процесс и начинает выполнение основного потока этого процесса. После завершения этого потока процесс выполняется. Этот основной поток предоставляется операционной системе с помощью кода запуска в виде адреса функции. Обычно это адрес предоставленной main функции или WinMain функции.

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

MFC различает два типа потоков: потоки пользовательского интерфейса и рабочие потоки. Потоки пользовательского интерфейса обычно используются для обработки ввода пользователем и реагирования на события и сообщения, созданные пользователем. Рабочие потоки обычно используются для выполнения задач, таких как пересчет, которые не требуют ввода пользователем. API Win32 не различает типы потоков; Он просто должен знать начальный адрес потока, чтобы он смог начать выполнение потока. MFC обрабатывает потоки пользовательского интерфейса специально путем предоставления насоса сообщений для событий в пользовательском интерфейсе. CWinApp пример объекта потока пользовательского интерфейса, так как он является производным от CWinThread событий и сообщений, созданных пользователем.

Особое внимание следует уделять ситуациям, когда нескольким потокам может потребоваться доступ к одному объекту. Многопоточность. Программирование Советы описывает методы, которые можно использовать для решения проблем, которые могут возникнуть в этих ситуациях. Многопоточность. Использование классов синхронизации описывает, как использовать классы, доступные для синхронизации доступа из нескольких потоков в один объект.

Написание и отладка многопоточного программирования по сути является сложной и сложной задачей, так как необходимо убедиться, что объекты не обращаются к нескольким потокам одновременно. Многопоточные разделы не учат основам многопоточного программирования, только как использовать MFC в многопоточной программе. Многопоточные примеры MFC, включенные в Visual C++, иллюстрируют несколько многопоточных api добавления функций и API Win32, не охватываемых MFC; однако они предназначены только для того, чтобы быть отправной точкой.

Дополнительные сведения о том, как операционная система обрабатывает процессы и потоки, см. в статье "Процессы и потоки " в пакете SDK для Windows.

Дополнительные сведения о поддержке многопоточных операций MFC см. в следующих разделах:

См. также

Поддержка многопоточности для устаревшего кода (Visual C++)