Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] Classe thread

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34

    [C++] Classe thread

    Ciao a tutti mi sto avvicinando da poco al C++ e ormai sono abbastanza skillato.
    Ho un solo problema che non riesco a risolvere. I thread.
    In internet ho guardato un po in giro e ho visto che la soluzione più comune è una quella di creare una classe astratta "Thread" nella quale sono presenti più o meno sempre gli stessi metodi.
    codice:
    class CThread
    {
    public:
    	CThread(void);
    	virtual ~CThread(void);
    	/**
    	 * \brief Metodo che fa partire il thread
    	 */
    	void Start ();
    	/**
    	 * \brief Metodo che ferma il thread
    	 */
    	void Stop ();
    
    	/**
    	 * \brief Metodo che attende la fine del thread
    	 */
    	void WaitForCompletation ();
    
    	virtual void * Run (void) = 0;
    private:
    	pthread_t thread;
    	pthread_mutex_t mutex;
    };
    Dove il metodo Run deve essere implementato dalle classi che estendono questa classe.
    Ora il mio problema è che non ho ancora trovato un'implementazione di questa interfaccia quindi non saprei come fare soprattutto il metodo start.
    Ho provato a implementarlo ma non riesco a trovare una soluzione.
    So che esistono anche le librerie boost ma non trovo nessun esempio che funzioni a dovere.
    Se qualcuno ha una soluzione ve ne sarei veramente grato.
    PS programmo sotto Linux

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Definire "skillato".
    Il C++11 ha introdotto il multithread con una serie di classi apposite. Se hai una versione recente di G++ puoi usare std::thread.
    codice:
    #include <iostream>
    #include <thread>
    
    void fz() {
       // qualcosa che faccia perdere un pò di tempo. 
       // Ad esempio un ciclo sostanzioso 
     ...
    }
    
    int main (etc) {
        std::thread t0(fz);
        cout << "main" << endl;
        t0.join();
    }
    La documentazione la trovi qui.
    http://en.cppreference.com/w/cpp/thread/thread
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34
    Ciao si infatti ho detto abbastanza "skillato" non molto
    Lo std::thread l'avevo visto il problema è che non ne ho capito a fondo il funzionamento.
    Se io ho una classe che chiamiamo ad esempio Server presumo di doverla progettare in questo modo.
    codice:
    class Server{
    
    public:
       Start();
       Stop();
    private:
       Run();
    }
    e il metodo start sarà del tipo:
    codice:
    void Start(){
       //mi metto in attesa di connessione
       //Accetto una connessione
       std::thread t0(Run);
    }
    è esatto e nel caso io volessi avere un array di thread dichiarato magari nella dichiarazione delle classe?
    Negli esempi che ho visto non ho trovato nulla a riguardo.
    Scusa l'ignoranza ma questa parte non mi entra proprio in testa...

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Supponendo diverse istanze della classe Server dovrai fare:
    codice:
    class Server{
        public:
            Start();
            Stop();
       private:
            Run();
            std:thread t0;
    }
    
    
    Server::Start() {
        // std::thread non si copia. Si sposta.
        t0 = std::move(std::thread(&Server::Run,this));
    }
    
    Server::Stop() {
        t0.join();
    }
    Se vuoi un array di std:thread lo fai come un comune array, avendo l'accortezza di creare ogni singola locazione come la Server::Start.

    Ti dò un tutorial sulla concorrenza in C++. Il sonoro è in inglese ma il video mostra il codice che viene scritto per cui seguendo quello non dovresti avere problemi.
    Trattandosi di standard C++ il compilatore è relativo.
    http://www.youtube.com/playlist?list=PL1835A90FC78FF8BE
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34
    Grazie mille molto utile e veramente spiegato bene.
    Adesso me le guardo tutte.
    devo inserire Risolto???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.