# include <iostream>
#endif // DEBUG
+PlaQui::Server::Runnable::~Runnable(void) {
+#ifdef DEBUG
+ std::cerr << __FILE__ << ": destructor(this = " << this << ")"
+ << std::endl;
+#endif // DEBUG
+}
+
PlaQui::Server::Runnable::Runnable(void): thread(0), stop(false) {
+#ifdef DEBUG
+ std::cerr << __FILE__ << ": constructor." << std::endl;
+#endif // DEBUG
}
-void PlaQui::Server::Runnable::static_run(PlaQui::Server::Runnable* runner) {
+void PlaQui::Server::Runnable::static_run(Runnable* runner) {
#ifdef DEBUG
- std::cerr << __FILE__ << ": runner = " << runner << std::endl;
+ std::cerr << __FILE__ << ": static_run(runner = " << runner << ")"
+ << std::endl;
#endif // DEBUG
runner->real_run();
runner->signal_finished().emit();
void PlaQui::Server::Runnable::run(bool detach) {
#ifdef DEBUG
- std::cerr << __FILE__ << ": detach = " << detach << std::endl;
+ std::cerr << __FILE__ << ": run(detach = " << detach << ")" << std::endl;
#endif // DEBUG
// Si vamos a correr la tarea en un thread.
if (detach) {
- // Nos aseguramos de tener threads.
- if (!Glib::thread_supported()) {
- Glib::thread_init();
- }
// Corremos el thread en una funcion estática para poder destruirlo al
// finalizar, pasandole el puntero al objeto.
thread = Glib::Thread::create(
- SigC::bind<Runnable*>(
- SigC::slot(&PlaQui::Server::Runnable::static_run),
- this),
+ SigC::bind<Runnable*>(SigC::slot(&Runnable::static_run), this),
true);
// Si no corremos la tarea normalmente.
} else {
void PlaQui::Server::Runnable::finish(bool attach) {
#ifdef DEBUG
- std::cerr << __FILE__ << ": attach = " << attach << std::endl;
+ std::cerr << __FILE__ << ": finish(attach = " << attach << ")" << std::endl;
#endif // DEBUG
- // TODO - necesita un mutex?
stop = true;
if (attach) {
thread->join();