Поскольку это, очевидно, связано с вашим предыдущим вопросом C попытка отличить универсальный указатель
Я хочу сказать, что вы используете неверный механизм работы GIO (ииспользовать его также по неправильным причинам), если вы дадите более подробную информацию о том, что вы пытаетесь сделать, и ПОЧЕМУ вы хотите сделать это асинхронно, кто-то может дать вам лучший ответ, если вы все еще делаете то же самоечто-то в build()
вы были раньше, это ВСЕ ЕЩЕ проблема с вашим кодом, если вы оставляете вещи вне кода, который вы разместили, пожалуйста, оставьте некоторые комментарии, чтобы смутно объяснить, что бы это делало.
Вы не предоставили достаточно подробностей, чтобы дать правильный ответ.(и ваш код на этот раз кажется МЕНЬШЕ, чем в прошлый раз), GIOSchedulerJob передается вашему load();
GIO, когда вы запускаете асинхронную работу с g_io_scheduler_push_job()
.Например, загрузка может выглядеть примерно так:
gboolean load(GIOSchedulerJob *job, GCancellable *cancellable, gpointer user_data)
{
// load a bunch of data and stuff it into param, or wherever
g_io_scheduler_job_send_to_mainloop(job,(GSourceFunc)job_func, ¶m, g_free);
return TRUE;
}
gboolean job_func(gpointer user_data)
{
JobParam* job_param = (JobParam*)user_data;
build(job_param->widget, job_param->mw);
return TRUE;
}
Но, по сути, вы используете неправильный API, job_func()
не должен иметь тот же тип, что и g_io_scheduler_job_send_to_mainloop()
Также это не такЭто действительно должен быть новый вопрос, вы могли бы отредактировать свой предыдущий.