Асинхронная загрузка изображений в gtkmm - PullRequest
1 голос
/ 17 июня 2020

В настоящее время в моем проекте мы используем gtkmm pixbuf create_from_file или create_from_date , который вешает весь GUI на 1-2 секунды в случае изображений с высоким разрешением и в в случае загрузки нескольких изображений для экрана он становится ужасно медленным. Можно ли асинхронно загружать изображения в gtkmm для двух вышеуказанных функций? Я могу найти методы в gtk для асинхронной загрузки изображений, но не в gtkmm. Пример был бы полезен, поскольку я не могу найти ничего, связанного с этим.

  if(!imageName.empty())
  {
    //Load image in pixbuf
    picPixBuff = Gdk::Pixbuf::create_from_file(imageName);

    picPixBuff = picPixBuff->scale_simple(150,35,Gdk::INTERP_BILINEAR);

   }

Я прошел через это. Связанный вопрос - Как загрузить виджет как отдельный поток в gtk? (Вала)

1 Ответ

2 голосов
/ 26 июня 2020

Для этого есть документы . Этот пример делает именно то, о чем вы просите.

Это функции, которые делают c маги. Этому примеру легко следовать.

// notify() is called from ExampleWorker::do_work(). It is executed in the worker
// thread. It triggers a call to on_notification_from_worker_thread(), which is
// executed in the GUI thread.
void ExampleWindow::notify()
{
  m_Dispatcher.emit();
}

void ExampleWindow::on_notification_from_worker_thread()
{
  if (m_WorkerThread && m_Worker.has_stopped())
  {
    // Work is done.
    if (m_WorkerThread->joinable())
      m_WorkerThread->join();
    delete m_WorkerThread;
    m_WorkerThread = nullptr;
    update_start_stop_buttons();
  }
  update_widgets();
}
...