Всем привет, как с помощью WINAPI получить количество данных в очереди APC? Например есть APC-Routime. VOID NTAPI ApcRoutime( IN PVOID ApcContext, IN PIO_STATUS_BLOCK IoStatusBlock, IN ULONG Reserved) { /.... //Тут допустим какой код, для обработки результатов. //Если данных больше нет для обработки bComplete = TRUE; } Далее допустим создается объект, в котором мы указываем что данные должны поступать в нашу APC-Routime. HANDLE hTest = BlaBlaBla(NULL, ApcRoutime, lpApcContext, NULL, 0, 0); Далее мы должны перевести в поток в alertable состояние с помощью одной из функций SleepEx, WaitForSingleObjectEx и т.д, более подробно тут https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms681951(v=vs.85).aspx Как можно узнать, есть ли у потока в очереди APC задания, и если есть мы вызываем допустим эту функцию SleepEx(1000, TRUE); Сейчас я использую while(!bComplete) SleepEx(1000, TRUE); Думаю что это не совсем нормальный способ
Суть задачи не совсем понятна. Если я правильно понял, судя по bComplete, необходимо дождаться выполнения обработки. Если так - то критические секции в твоем случае вполне юзабельны. P.S.: забудь про Sleep в таких вещах. Только функции синхронизации. Код (Text): EnterCriticalSection bla...bla...bla... Код (Text): LeaveCriticalSection Ожидающий поток, так же использующий EnterCriticalSection, не завладеет критической секцией до тех пор, пока обработчик не завершит работу. Завладел - вперед за работу. Отработал - освободи секцию. Тонкость в том, что EnterCriticalSection ждет бесконечно долго и можно поймать deadlock. Что бы этого избежать, так же применяют TryEnterCriticalSection.