pthread_create mit C++



  • Hi,

    folgendes Programm funktioniert bei mir nicht:

    void hallo(void *name)
    {
      std::cout << "hallo" << std::endl;
      pthread_exit((void *) 0);
    }
    
    int main()
    {
    	 pthread_t t1;
    
      if(pthread_create(&t1, NULL, (void*)&hallo, (void *)"Thread 1") != 0) {
          std::cerr << "Fehler ..." << std::endl;
        }
    
      return 0;
    }
    

    Der Compiler ( übrigens gcc version 3.2.3 ) meldet dann folgenen Fehler:

    invalid conversion from `void*' to `void*()(void)'

    Wenn ich alle Casts entferne gibt er auch eine Fehlermeldung:

    Bsp: pthread_create(&t1, NULL, &hallo, (void *)"Thread 1")

    Fehler: invalid conversion from `void ()(void)' to ` void*()(void)'

    Kann mir da jemand weiterhelfen ???

    Danke!



  • die Funktion sollte auch noch void***** zurückgeben, deine tut das aber nicht!



  • void* hallo(void*)
    {
      ...
      return 0;
    }
    
    pthread_create(&t1, 0, hallo, (void*)"Hallo");
    


  • Danke, habs jetzt geschafft!!!

    Aber noch eine andere dämliche Frage:

    Ist es auch möglich Memberfunktionen einer Klasse int pthread_create zu verwenden?

    Habs schon versucht, ist mir aber nicht gelungen. Kennt jemand ein Beispiel oder einen Link?

    PS: Hab schon gegooglet bin aber anscheinend kein guter Sucher.

    Danke im Vorraus.



  • pasti schrieb:

    Ist es auch möglich Memberfunktionen einer Klasse int pthread_create zu verwenden?

    nur statische. Mit dem extra-Parameter an pthread_create kannst du aber das Objekt mitgeben:

    class Thread
    {
    public:
      Thread()
      {
        pthread_create(..., _thread, this);
      }
    
      void* thread()
      {
        ...
      }
    
    private:
      static void* _thread(void* This) { return ((Thread*)This)->thread(); }
    };
    

Anmelden zum Antworten