Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
19.11.2015, 09:08
|
|||
|---|---|---|---|
|
|||
Народ, помогите, мозг уже сломал. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2015, 04:12
|
|||
|---|---|---|---|
|
|||
Народ, помогите, мозг уже сломал. WASAPI. C++. |
|||
|
#18+
Всё, разобрался. Проблема, естественно, в deadlock. В процессе обработки события IMMNotificationClient происходило событие из интерфейса IAudioSessionNotification. Нужно иметь ввиду, что при использовании критических секций любой вызов WASAPI вызовет deadlock, а не только вызов метода в пределах одного интерфейса. Выход из положения нашёл в использовании Lock-free стека для Windows в качестве очереди сообщений потоку-обработчику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2015, 14:10
|
|||
|---|---|---|---|
Народ, помогите, мозг уже сломал. WASAPI. C++. |
|||
|
#18+
Acute, Я вообще не понимаю, что там у тебя и как, что это за IMMNotificationClient, но PostThreadMessage() обкладывать критическими секциями не нужно ни при каких обстоятельствах, тем более данных при этом не посылается. При доступе к данным, которые посылаются, возможно, нужны секции или другая синхронизация, но не для посылки сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2018724]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 181ms |

| 0 / 0 |
