У меня есть программа SDL2, которая отлично работает.Но время от времени, когда я компилирую, выполняю и закрываю несколько раз мою программу, она резко замедляется при вызове SDL_Init ().Я все еще вижу свою консоль, но она очень медленная и требует 5 минут для возобновления.
Это происходит, когда я использую "SDL_INIT_EVERYTHING" в качестве флага.Но через 5 минут программа работает без сбоев.Но когда я использую «SDL_INIT_VIDEO | SDL_INIT_EVENTS» в качестве флага, программа останавливается при вызове SDL_PollEvent () вместо SDL_Init ().
Я использую динамически загружаемую библиотеку SDL_2.0.9.Я повторяю, что эта программа уже отлично работает и ломается, пока к коду не применяется мод.
На самом деле, код работает.Я не думаю, что это проблема здесь.
int main(int argc, char** argv) {
srand(_getpid());
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
printf("ERR SDL_INIT\n");
SDL_Quit();
system("PAUSE");
return EXIT_FAILURE;
}
//* Basically the rest of my program.
}
При пошаговом запуске программы программа явно замедляется при вызове SDL_Init ().
Вот некоторые снимки проблемы:
На самом деле он должен быстро инициализировать SDL, как и большую часть времени, а затем продолжить выполнение программы без блокировки вызова SDL_PollEvent ().
Iможет более или менее решить проблему, перезагрузив мой компьютер, но это происходит довольно часто.
Скажите, нужна ли другая информация, о которой я не думал.
РЕДАКТИРОВАТЬ:
Как и предполагалось, я попытался написать минимальный проверяемый код, чтобы убедиться, что проблема не в коде.
#include <stdlib.h>
#include <stdio.h>
#include "SDL.h"
int main(int argc, char** argv) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("ERR SDL_INIT\n");
SDL_Quit();
system("PAUSE");
return EXIT_FAILURE;
}
SDL_Window* window = NULL;
window = SDL_CreateWindow("WindowName", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
if (!window) { //test si la fenetre existe bien
printf("ERR SDL_WINDOW\n");
SDL_Quit();
system("PAUSE");
return EXIT_FAILURE;
}
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_bool quit = SDL_FALSE;
SDL_Event e;
while (!quit) {
SDL_SetRenderDrawColor(renderer, 255, 0, 255, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
while (SDL_PollEvent(&e)) {
if (e.window.event == SDL_WINDOWEVENT_CLOSE)
quit = SDL_TRUE;
switch (e.type) {
case SDL_KEYDOWN:
switch (e.key.keysym.sym)
{
case SDLK_ESCAPE:
quit = SDL_TRUE;
break;
default:
break;
}
}
}
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return EXIT_SUCCESS;
}
И теперь, когда SDL_Init () вызывается с использованием SDL_INIT_VIDEO, программа останавливается при вызове.SDL_PollEvent ().Консоль VS возвращает мне эти строки в точный момент остановки:
'MinimalVerifiableExample.exe' (Win32) : Chargé 'C:\Windows\SysWOW64\hid.dll'. Impossible de trouver ou d'ouvrir le fichier PDB.
'MinimalVerifiableExample.exe' (Win32) : Chargé 'C:\Windows\SysWOW64\devobj.dll'. Impossible de trouver ou d'ouvrir le fichier PDB.
Я не знаю, связано ли это с этим.