Size: a a a

2020 August 17

RN

Ruslan Neshta in pro.cxx
и посмотреть что будет
источник

RN

Ruslan Neshta in pro.cxx
Alex
А хотя бы гипотетически, что это могло бы быть? Как может поток выйти и не упасть?
уб))))))
источник

m

magras in pro.cxx
Alex
А хотя бы гипотетически, что это могло бы быть? Как может поток выйти и не упасть?
По хендлу должна быть возможность посмотреть в каком состоянии находится трэд. То что дебаггер не показывает его в окне еще не говорит о том, что его нет.

На счет того что могло вызвать такое у меня нет особых идей. Раскапывание хендла может дать дополнительную информацию.
источник

A

Alex in pro.cxx
Попробовал вызвать GetExitCodeThread(m_thread.native_handle(), &code), но возвращает ошибку - The handle is invalid
источник

A

Alex in pro.cxx
Alex
Попробовал вызвать GetExitCodeThread(m_thread.native_handle(), &code), но возвращает ошибку - The handle is invalid
Ошибся - вызвал после thread.join(), а нужно было перед. Если перед - возвращает успех и код выхода 0
источник

A

Alex in pro.cxx
что, я так понимаю, означает, что поток действительно завершился
источник

RN

Ruslan Neshta in pro.cxx
можно попробовать варик с дедлоком))
источник

A

Alex in pro.cxx
залочить поток?
источник

VA

Valery Antopol in pro.cxx
Alex
Попробовал вызвать GetExitCodeThread(m_thread.native_handle(), &code), но возвращает ошибку - The handle is invalid
Так может у тебя объект m_thread содержит мусор?
источник

A

Alex in pro.cxx
я, кстати, всё из потока убрал, оставил Sleep(10) и while (!m_terminate)
источник

A

Alex in pro.cxx
такой мусор, что переданная ему функция запустилась, а потом GetExitCodeThread показал успех и join не упал? Вряд ли
источник

m

magras in pro.cxx
А нет ли в исчезнувшем трэде корутин? Они могут использовать jmp для переключения и при некорректной реализации не раскрутить стэк.
источник

VA

Valery Antopol in pro.cxx
Alex
такой мусор, что переданная ему функция запустилась, а потом GetExitCodeThread показал успех и join не упал? Вряд ли
Ну может мусор там появился после запуска
источник

A

Alex in pro.cxx
magras
А нет ли в исчезнувшем трэде корутин? Они могут использовать jmp для переключения и при некорректной реализации не раскрутить стэк.
Нет, вообще ничего уже нет
источник

A

Alex in pro.cxx
только while по std::atomic_bool и пачка OutputDebugString
источник

VF

Vitaly Farmov in pro.cxx
Alex
Нет, вообще ничего уже нет
Дай уже минимальный код, который воспроизводит проблему
источник

VA

Valery Antopol in pro.cxx
Alex
такой мусор, что переданная ему функция запустилась, а потом GetExitCodeThread показал успех и join не упал? Вряд ли
Например, у тебя m_thread  содержит по какой-то причине данные от другого такого объекта, уже удаленного.
источник

A

Alex in pro.cxx
Во всем приложении нигде корутин нет
источник

A

Alex in pro.cxx
Идею понял, но не вижу такой возможности. Поток лежит в классе, которого один инстанс на всё приложение
источник

RN

Ruslan Neshta in pro.cxx
Alex
залочить поток?
main thread

while(!unlocked);
tr.join()

tr thread func

{
...
//loop
...
unlock main thread
}
источник