Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2015, 06:42   #1
Lorise
 
Регистрация: 16.02.2015
Сообщений: 3
Печаль Воксели шмоксели

Всем привет, решил попробовать свои силы в написании игрушки похожую на minecraft. Вроде как получилось генерировать меши чанков на основе шума перлина и загружать их в 2 потоке по ходу игры. Получилось что приложение вроде работает но не стабильно, вылетают исключения + фризы иногда, а иногда все гладко до самого завершения работы программы, конечно есть догадки из за чего это но конкретно что делать не знаю. Помогите пожалуйста исправить фатальные ошибки в проекте.

скрин для представления
5vsuo7o02857.jpg

проект
VoxelEngine 2.rar
Lorise вне форума Ответить с цитированием
Старый 17.02.2015, 12:10   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

В детали не вникал, но что бросается в глаза:
1) Проверка на queue.empty не защиена мьютексом
2) В следствии пункта 1 при входе в сам цикл может оказаться, что в очереди реально ничего нет.

Сей механизм жрет CPU на все 100% - прочитайте про семафоры, как раз то что нужно.

Забудьте раз и навсегда функцию TerminateThread() пока не поздно
waleri вне форума Ответить с цитированием
Старый 17.02.2015, 16:06   #3
Lorise
 
Регистрация: 16.02.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
В детали не вникал, но что бросается в глаза:
1) Проверка на queue.empty не защиена мьютексом
2) В следствии пункта 1 при входе в сам цикл может оказаться, что в очереди реально ничего нет.

Сей механизм жрет CPU на все 100% - прочитайте про семафоры, как раз то что нужно.

Забудьте раз и навсегда функцию TerminateThread() пока не поздно
Спасибо, про семафоры прочитаю. а чем плоха функция TerminateThread()?
В программе еще остался фриз( окно перестает реагировать на что либо даже крестик нажать нельзя ), с чем это может быть связанно?
Lorise вне форума Ответить с цитированием
Старый 17.02.2015, 17:25   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Про TerminateThread почитайте здесь:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Окно зависает если никто не качает сообщения. Судя по коду, у вас это может произойти при нажатии на 1 - OnEvent будет работать до бесконечности, поскольку некому обработать сообщения и изменить статус клавишы. Воспользуйтесь GetAsyncKeyState или измените алгоритм OnEvent.

Все сказанное на основе осмотра кода, если проблема останется, запустите под отладчиком да посмотрите где зависнет.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц