Окно SDL Video display: как прикрепить обратный вызов события закрытия окна

0

Я создаю видеоплеер с использованием SDL, и я использую язык программирования C. В моей основной функции я создаю "цикл цикла" и показываю видео. После отображения последнего видеофрагмента я держу окно дисплея вверх. Когда я пытаюсь закрыть окно с помощью правой кнопки "X", оно не закрывает окно, так как к нему не подключен обратный вызов. Мой вопрос: есть ли способ подключить обратный вызов к событию закрытия Windows. Я ищу решение, которое работает на всех платформах (windows, linux и mac)

Теги:
callback
video
sdl

2 ответа

0
Лучший ответ

SDL имеет SDL_AddEventWatch(), вы можете настроить фильтр, который вызывает ваш обработчик на SDL_QUIT. Вы также можете просто перебрать через SDL_WaitEvent() в своем потоке, и это вызовет ваш обратный вызов или выполнит ваш код там.

Изменение: SDL_WaitEvent() должен использоваться в потоке, который инициализировал видеосистему. То же самое для других событий очереди событий SDL. Поэтому вы должны правильно настроить это, это проблема дизайна.

  • 0
    Благодарю. это выглядит многообещающе.
2

Просто поместите это в свой основной цикл для обработки событий, если вы не обрабатываете QuitEvent, ваше окно не будет закрыто, нажав на X.

SDL_Event evt;

while(SDL_PollEvent(&evt))
{

   switch(evt->type)
   {
      case SDL_QUIT:
      //your quit procedure
      break;
   }

}
  • 0
    Я использую опрос событий в своей основной функции. это работает только тогда, когда вы находитесь в цикле for. После того, как я отобразил все видеокадры, он больше не запускает цикл for. Просто чтобы уточнить, я создаю динамическую библиотеку для выполнения работы, связанной с SDL. Я звоню в эту библиотеку из другого приложения.
  • 0
    Обычно вы должны опрашивать ваши события в каждом кадре и без подробностей, сложно дать идеальный ответ ... Но вы можете перехватить это событие и затем вызвать виртуальный метод, который реализован в вашем приложении. Но это скорее решение C ++, чем C.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню