Использование дескрипторов событий в разных потоках - C ++ - PullRequest
2 голосов
/ 19 апреля 2011

У меня есть приложение, в котором я делюсь дескрипторами событий между потоками.Эти дескрипторы событий используются для передачи в приложение уведомлений о завершении и получении данных о последовательном вводе-выводе.Дескрипторы копируются в новые потоки как передаваемый параметр конструкторов классов или вызовы CreatThread.Я думал, что это работает, но я столкнулся со странной ошибкой, когда кажется, что эти события могут не быть правильно сигнализированы.Должен ли я использовать функцию DuplicateHandle для этого?Если да, будет ли правильным следующее использование?

::DuplicateHandle(
    ::GetCurrentProcessId(),
    hMyHandle,
    ::GetProcessIdOfThread( hReceivingThreadHandle ),
    &hMyDupHandle,
    0,
    TRUE,
    DUPLICATE_SAME_ACCESS
    );

К сожалению, я не могу быть на 100% уверен в этой ошибке, потому что многопоточная отладка сложна.Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Нет необходимости использовать этот API (DuplicateHandle), если все потоки, использующие существующий дескриптор, находятся в одном и том же процессе. Потоки в одном и том же процессе могут использовать одно и то же значение дескриптора для событий, семафоров и т. Д.

1 голос
/ 19 апреля 2011

Вы можете обмениваться дескрипторами событий между различными потоками в процессе.Ваша ошибка лежит в другом месте.

...