Я создаю C программу с потоками, которая использует библиотеку SDL2 в linux. Цель состоит в том, чтобы иметь программу, которая показывает пустое окно и печатает «Привет, мир!» на консоль каждые 0,5 секунды.
Пока что окно создано успешно и ввод и обработка событий работают. Проблема в том, что "Привет, мир!" сообщение печатается только один раз, а не каждые 0,5 секунды.
Вот код:
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_thread.h>
static int thread_function(void *ptr)
{
printf("Hello, world!\n");
SDL_Delay(500);
return 0;
}
void input(int *quit)
{
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
*quit = 1;
}
}
}
void render(SDL_Renderer *renderer)
{
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
int main(int argc, char *argv[])
{
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
printf("Could not initialize SDL2! %s\n", SDL_GetError());
return 1;
}
SDL_Window *window = SDL_CreateWindow(
"Program",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
400, 400, 0);
if (window == NULL) {
printf("Could not create window! %s\n", SDL_GetError());
return 1;
}
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
if (renderer == NULL) {
printf("Could not create renderer! %s\n", SDL_GetError());
return 1;
}
SDL_Thread *thread = SDL_CreateThread(thread_function, "thread", (void *)NULL);
if (thread == NULL) {
printf("Could not create thread! %s\n", SDL_GetError());
return 1;
}
int quit = 0;
while (quit != 1) {
input(&quit);
render(renderer);
}
SDL_WaitThread(thread, NULL);
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
SDL_Quit();
return 0;
}
Я компилирую программу с помощью следующей команды:
gcc -lSDL2 main.c
программа компилируется просто отлично, но поведение не то, что я ожидаю и хочу. Я ожидаю, что функция потока будет выполняться непрерывно параллельно с моим основным l oop. Но похоже, что функция потока вызывается только один раз.
Я пытался поместить бесконечное число l oop в функцию потока, но это приводит к перегружению программы. Под этим я подразумеваю, что обработчик событий (функция ввода) больше не реагирует и программа в конечном итоге падает.
Я скомпилировал этот код в Debian 10.3 с установленным пакетом libsdl2-dev.
Я полностью упускаю смысл в том, как использовать темы или что-то еще не так?