Ожидание объекта с помощью функции WaitForSingleObject

Описание функции WaitForSingleObject:

Функция WaitForSingleObject предназначена для ожидания завершения работы одного объекта синхронизации. Она блокирует выполнение текущего потока до тех пор, пока указанный объект синхронизации не будет сигнализирован или не истечет определенное время ожидания.

Пример использования функции WaitForSingleObject:


#include <windows.h>
#include <iostream>

DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
    // Ожидание 5 секунд
    Sleep(5000);
    std::cout << "Поток завершен" << std::endl;

    // Сигнализируем об окончании работы
    SetEvent(lpParam);
    
    return 0;
}

int main()
{
    HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    
    if (hEvent == NULL)
    {
        std::cerr << "Не удалось создать объект события" << std::endl;
        return 1;
    }

    DWORD dwThreadId;
    HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, hEvent, 0, &dwThreadId);

    if (hThread == NULL)
    {
        std::cerr << "Не удалось создать поток" << std::endl;
        return 1;
    }

    std::cout << "Ожидание завершения потока..." << std::endl;

    DWORD dwResult = WaitForSingleObject(hEvent, INFINITE);

    if (dwResult == WAIT_OBJECT_0)
    {
        std::cout << "Поток успешно завершен" << std::endl;
    }
    else if (dwResult == WAIT_TIMEOUT)
    {
        std::cout << "Истекло время ожидания" << std::endl;
    }
    else
    {
        std::cerr << "Произошла ошибка при ожидании объекта" << std::endl;
        return 1;
    }

    // Закрываем дескрипторы объектов
    CloseHandle(hThread);
    CloseHandle(hEvent);

    return 0;
}

В данном примере создается объект события hEvent с начальным состоянием невызванного (FALSE). Затем создается новый поток hThread, который выполняет функцию ThreadFunc, принимая указатель на объект события в качестве параметра. В функции ThreadFunc выполняется задержка в 5 секунд с помощью функции Sleep, после чего вызывается функция SetEvent, сигнализирующая о завершении работы. В основном потоке происходит вызов функции WaitForSingleObject, блокирующего выполнение до тех пор, пока объект события не будет сигнализирован. Результат выполнения функции WaitForSingleObject проверяется с помощью условных операторов. После завершения работы все созданные дескрипторы закрываются с помощью функции CloseHandle.

Использование функции WaitForSingleObject позволяет эффективно организовывать синхронизацию между потоками в многопоточных приложениях. Она позволяет контролировать параллельное выполнение операций и организовывать вызовы функций в правильной последовательности, в зависимости от состояния объектов синхронизации.

Похожие вопросы на: "waitforsingleobject "

Магазин активов Unity
Искусство работы с SQL
Разработка на Java: основы, примеры, советы
Как добавить массив в массив в PHP?
SQL сортировка по убыванию
BPMN.io - онлайн-редактор для моделирования процессов с использованием стандарта BPMN
QuerySelectorAll в JavaScript
Учимся программировать на Python с GoTo Python
Гугл Транслятор - самый удобный способ переводить тексты онлайн
Python поиск в списке