SDL Init замедляет программу, пока код верен и прекрасно работает до - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть программа 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 ().

Вот некоторые снимки проблемы:

My program starts normally

And then enters SDL_Init() without return errors or anything and slows down

На самом деле он должен быстро инициализировать 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.

Я не знаю, связано ли это с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...