Я кодирую настольную игру в Qt, где после того, как игрок делает ход, компьютерный ИИ должен остановиться и подумать некоторое время. Однако, пока он думает, кажется, что экран не будет обновляться, пока не будет выполнена каждая строка кода. Таким образом, пользователь нажимает на квадрат, видит, что ничего не происходит в течение нескольких секунд, а затем внезапно видит результат как его движения , так и движения компьютера.
В попытке исправить это, я попытался создать новый поток, в котором ИИ запускает свой код, а затем помещает свою часть на доску. Однако иногда (и это очень противоречиво) игра вылетает после того, как компьютер сделал ход.
Так что вы, ребята, тоже можете:
- Скажите, как заставить MainWindow обновить его содержимое
- Помогите мне попытаться отладить проблему сбоя (я совершенно новичок в потоках)
РЕДАКТИРОВАТЬ - Я попытался установить точки останова, как предложил suszterpatt, и программа, похоже, постоянно зависала в отладчике (это не было до того, как я установил точки останова).
В любом случае, когда я прохожу программу, кажется, что она нормально проходит через функцию run
, пока не достигнет конечной скобки, а затем, если я прохожу через нее, она переходит в строку 317 на qthread_win.cpp
, которая просто говорит
finish(arg); //line 317
return 0;
Если я перейду через эту строку, отладчик зависнет, и через 20 секунд Qt предупредит меня. Если я продолжу, я получу сообщение «Это приложение запросило среду выполнения прекратить его необычным способом», которое я получаю, когда программа иногда падает, когда я не отлаживаю.
Что мне теперь делать?