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