Scoped_ptr

di il
1 risposte

Scoped_ptr

Buonasera,
mi sono accorto di non aver capito lo scoped_ptr di boost. Pensavo che, mettendolo come campo dati di una classe Thread uno scoped_ptr specializzato con un thread e lanciando questo thread nel costruttore di Thread, al momento della distruzione dell'oggetto Thread venisse distrutto pure l'oggetto thread e di conseguenza cessasse l'esecuzione del thread associato allo scoped_ptr. Così non è, il thread associato allo scoped_ptr continua a essere eseguito. Posto il codice:

#include <boost/thread.hpp>
#include <iostream>
#include <stdlib.h>

using namespace std;

class Thread {
public:
    Thread() : ptr_t1(new boost::thread(boost::bind(&Thread::run, this))) {}
    ~Thread() {}
    void run()
    {
        while(true) {
            cout << "I'm in run" << endl;
            sleep(1);
    }
}
private:
    boost::scoped_ptr<boost::thread> ptr_t1;
};


void lancia() {
    Thread t;
    for(int i = 0; i < 10; i++) {
        cout << "I'm in lancia" << endl;
        sleep(1);
    }
}

int main(int argc, char* argv[]) {
    lancia();
    while(true) {
        cout << "The object may be destroyed" << endl;
        sleep(1);
    }
    return 0;
}
Grazie

1 Risposte

  • Re: Scoped_ptr

    Usando le classi standard del C++, se un thread esce di scope senza che sia joined o detached esplicitamente viene sollevata un'eccezione.
    Probabilmente le classi boost fanno il detach del thread in automatico. Dovresti guardare la documentazione a proposito.
Devi accedere o registrarti per scrivere nel forum
1 risposte