Реализация многопоточности на языке 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 см. в следующих разделах: