Проблема c MessageBox
От: pva  
Дата: 12.01.24 20:03
Оценка:
Привет,

что-то я потерялся в дебрях WinApi. Прошу помощи. Предистория:

https://en.cppreference.com/w/cpp/thread/mutex

lock — locks the mutex, blocks if the mutex is not available


реализация в msvc std
    void lock() {
        if (_Mtx_lock(_Mymtx()) != _Thrd_result::_Success) {
            // undefined behavior, only occurs for plain mutexes (N4950 [thread.mutex.requirements.mutex.general]/6)
            _STD _Throw_Cpp_error(_RESOURCE_DEADLOCK_WOULD_OCCUR);
    ...


и я таки наступил на эти грабли в результате примерно такого кода
fn(...)
        std::unique_lock guard(sync);
    ...
    MessageBox(...)
    fn(...)
            std::unique_lock guard(sync);

Тоесть, по стеку креша я вижу что блокирующий MessageBox прокинул сообщения в WindowProc через UserCallWinProcCheckWow, что привело к рекурсии.
Как это вообще понимать? и самое главное как с этим бороться?
newbie
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.