Доброго времени суток. Удалось наконец-то запустить функцию в отдельном потоке, но не теперь встала другая проблема:
Теперь мне нужно все что я загрузил с помощью этой функции, уже в основном потоке отобразить изображение в GtkAnimView. Делаю так:
Сама функция для загрузки из стрима:
void loading(GtkWidget* widget ,MainWin* mw)
{
GInputStream* input_stream;
input_stream = g_file_read(loading_file, mw->generator_cancellable, NULL);
mw->animation = load_image_from_stream(G_INPUT_STREAM(input_stream), mw->generator_cancellable);
g_input_stream_close(input_stream, mw->generator_cancellable, NULL);
g_object_unref (input_stream);
}
Теперь запускаю ее в дургом потоке:
gboolean main_win_open( MainWin* mw, ZoomMode zoom )
{
JobParam* param1 = malloc(sizeof(JobParam));
param1->widget = NULL;
param1->mw = mw;
g_io_scheduler_push_job (job_func1, param1, NULL, G_PRIORITY_HIGH, param1->mw->generator_cancellable);
}
Cама job_func1, здесь же пытаюсь запусить в основной поток функцию set_image с помощью g_io_scheduler_job_send_to_mainloop:
gboolean job_func1(GIOSchedulerJob *job, GCancellable *cancellable, gpointer user_data)
{
JobParam* param = (JobParam*)user_data;
while (g_cancellable_is_cancelled(cancellable) == FALSE)
{
loading(NULL, param->mw);
g_cancellable_cancel (param->mw->generator_cancellable);
}
// переход в основной поток
g_io_scheduler_job_send_to_mainloop(job, set_image, param, NULL);
g_cancellable_cancel (param->mw->generator_cancellable);
}
set_image:
void set_image(JobParam* param)
{
gtk_anim_view_set_anim (param->mw->aview, param->mw->animation);
}
Запускаю программу. Вызываю все это дело. Изображение грузится и отображается нормально. Но если попытаться загрузить другое изображение то отображается почему то только первое. Причем loading_file меняется каждый раз.
Спасибо.