g_idle_add()

When a signal is emitted a lot of times, and the processing of the action associated with the signal is expensive, it’s an option to only run the action when the system is idle. Using this function in this manner, this result can be achieved. I got to know this talking to pierlux in #champlain@irc.freenode.net and taking a look at champlain-marker.c from libchamplain. Thanks.

static gboolean scheduled;

static gboolean
run(gpointer user_data)
{
    /* expensive code */
    scheduled = FALSE;
    return FALSE;
}

static void
on_event(GObject * object, gpointer user_data)
{
    if(!scheduled)
    {
        scheduled = TRUE;
        g_idle_add(run, (gpointer) parameter_name);
    }
}

int main(int argc, char **argv)
{
    /* initialization */
    g_signal_connect(object, "event", G_CALLBACK(on_event), NULL);
    /* enter main loop */
}

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: