g_io_scheduler_job_send_to_mainloop проблема - PullRequest
0 голосов
/ 27 июня 2010

У меня есть следующий код для запуска функции в другом потоке:

void load (....)
{
    GIOSchedulerJob *job;
    g_io_scheduler_job_send_to_mainloop(job,(GSourceFunc)job_func,&param, 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.

Как я могу инициализировать работу?Или как я могу это исправить?

Спасибо.

1 Ответ

1 голос
/ 27 июня 2010

Поскольку это, очевидно, связано с вашим предыдущим вопросом 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, &param, 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()

Также это не такЭто действительно должен быть новый вопрос, вы могли бы отредактировать свой предыдущий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...