Primera aproximación

#include <glib.h>
#include <iostream>

using namespace std;

class A {
public:
    void tick() {
        cout << "tick" << endl;
    }
};

gboolean adaptor(gpointer p) {
    (static_cast<A*>(p))->tick();
    return TRUE;
}

int main() {
    A a;
    g_timeout_add(500, adaptor, &a);
    g_main_loop_run(g_main_loop_new(NULL, TRUE));
}

Si el fichero se llama method_timeout.cc, se puede compilar con:

$  make method_timeout CXXFLAGS="$(pkg-config --cflags glib-2.0)" LDLIBS="$(pkg-config --libs glib-2.0)"

Utilizando un método de clase como adaptador

class A {
public:
    void tick() {
        cout << "tick" << endl;
    }

    static gboolean tick_adaptor(gpointer p) {
        (static_cast<A*>(p))->tick();
	return TRUE;        
    }
};

int main() {
    A a;
    g_timeout_add(500, A::tick_adaptor, &a);
    g_main_loop_run(g_main_loop_new(NULL, TRUE));
}

Referencias



blog comments powered by Disqus