Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Народ, помогите, мозг уже сломал. WASAPI. C++.
|
|||
|---|---|---|---|
|
#18+
Итак, имеем код, который отслеживает события. IMMNotificationClient - вот он отслеживает. Я также держу список объектов IAudioSessionControl. По событию вызываю метод Release(). Всё. Зависон. Всё, что нашёл, это китаец создаёт отдельный поток и отправляет циклу обработки сообщений этого потока сообщения. Но и он, как я понял, столкнулся с этой проблемой. Он вызывает Sleep(200). Костыль же. Я считаю, правильное решение - это узнавать, находится ли поток в обработке события IMMNotificationClient. Если находимся - ждём. Как вышли - вызываем наш Release(). Как это сделать на практике? Нашёл такую функцию: LeaveCriticalSectionWhenCallbackReturns. Но чот не врубаюсь как метод класса ей передать. И вообще правильно ли так будет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 09:08 |
|
||
|
Народ, помогите, мозг уже сломал. WASAPI. C++.
|
|||
|---|---|---|---|
|
#18+
Всё, разобрался. Проблема, естественно, в deadlock. В процессе обработки события IMMNotificationClient происходило событие из интерфейса IAudioSessionNotification. Нужно иметь ввиду, что при использовании критических секций любой вызов WASAPI вызовет deadlock, а не только вызов метода в пределах одного интерфейса. Выход из положения нашёл в использовании Lock-free стека для Windows в качестве очереди сообщений потоку-обработчику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 04:12 |
|
||
|
Народ, помогите, мозг уже сломал. WASAPI. C++.
|
|||
|---|---|---|---|
|
#18+
Acute, Я вообще не понимаю, что там у тебя и как, что это за IMMNotificationClient, но PostThreadMessage() обкладывать критическими секциями не нужно ни при каких обстоятельствах, тем более данных при этом не посылается. При доступе к данным, которые посылаются, возможно, нужны секции или другая синхронизация, но не для посылки сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 14:10 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=57&tid=2018724]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 294ms |
| total: | 537ms |

| 0 / 0 |
