我在另一个帖子中使用了运行函数的代码:
void load (....)
{
GIOSchedulerJob *job;
g_io_scheduler_job_send_to_mainloop(job,(GSourceFunc)job_func,¶m, g_free);
}
gboolean job_func(GIOSchedulerJob *job, GSourceFunc func, gpointer user_data, GDestroyNotify notify)
{
JobParam* job_param = (JobParam*)user_data;
build(job_param->widget, job_param->mw);
return TRUE;
}
但是当我尝试调用g_io_scheduler_job_send_to_mainloop时,我收到错误:g_io_scheduler_job_send_to_mainloop: assertion 'job != NULL' failed
。
我如何初始化工作?或者我该如何解决?
谢谢。
答案 0 :(得分:1)
因为这显然与您之前的问题C attempt to difference a generic pointer
有关我要说我认为你正在使用错误的GIO工作机制(并且出于错误的原因使用它),如果你提供一些关于你想要做什么以及你想要做什么的更多细节如果你在build()
之前仍然做同样的事情,那么你可能能够给你一个更好的答案,如果你的代码存在问题,那么你的代码就会出现问题。你发布的代码,请用一些评论来模糊地解释它本来会做些什么。
你还没有给出足够的细节来给出正确答案。 (这次你的代码似乎比上次更加正确)
g_io_scheduler_job_send_to_mainloop是为了在主线程上完成一些需要完成的工作,作为正在进行的工作的一部分,GIOSchedulerJob会在你踢出一些GIO时被GIO传递给你的load();
异步使用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()
这也不一定是一个新问题,你可以编辑你以前的问题。