Heim > Backend-Entwicklung > C++ > Wie kann ich C-Klassen-Memberfunktionen in pthreads verwenden?

Wie kann ich C-Klassen-Memberfunktionen in pthreads verwenden?

Barbara Streisand
Freigeben: 2024-12-23 04:29:20
Original
330 Leute haben es durchsucht

How Can I Use C   Class Member Functions in pthreads?

Klassenmitgliedsfunktionen in Threads integrieren

In C tragen Klassenmitgliedsfunktionen von Natur aus einen versteckten Parameter namens „this“. Dies stellt eine Herausforderung dar, wenn versucht wird, Threads mithilfe von Mitgliedsfunktionen zu erstellen, da die Funktion pthread_create() der Standardbibliothek einen Funktionszeiger ohne solche Parameter erwartet.

Kompilierungsfehler: Funktionszeiger konnte nicht konvertiert werden

Wie der erste Codeausschnitt zeigt, führt der Versuch, eine Klassenmitgliedsfunktion an pthread_create() zu übergeben, direkt zu einer Kompilierung Fehler:

pthread_create(&t1, NULL, &c[0].print, NULL);
Nach dem Login kopieren

Der Compiler beschwert sich, dass er den Mitgliedsfunktionszeiger (void* (tree_item::*)(void*)) nicht in den erwarteten Funktionszeigertyp (void* (*)(void) konvertieren kann *)).

Lösung: Statische Klassenmethode oder unabhängige Funktion

Um dieses Problem zu umgehen, gibt es zwei praktikable Ansätze:

  1. Statische Klassenmethode:
    Definieren Sie eine statische Klassenmethode (die keinen „this“-Zeiger akzeptiert), die die gewünschte Funktionalität kapselt:

    class C
    {
    public:
        void *hello(void)
        {
            std::cout << "Hello, world!" << std::endl;
            return 0;
        }
    
        static void *hello_helper(void *context)
        {
            return ((C *)context)->hello();
        }
    };
    Nach dem Login kopieren
  2. Unabhängig Funktion:
    Erstellen Sie eine separate Funktion, die als Wrapper um die Klassenmitgliedsfunktion dient, und übergeben Sie dabei explizit den „this“-Zeiger als Argument:

    void hello_wrapper(void *context)
    {
        C *object = (C *)context;
        object->print();
    }
    Nach dem Login kopieren

Thread-Erstellung mit statischer Klassenmethode oder Wrapper-Funktion

Mit jedem dieser Ansätze können Sie jetzt verwenden pthread_create() zum Erstellen von Threads, die die gewünschten Klassenmitgliedsfunktionen ausführen:

C c;
pthread_create(&amp;t, NULL, &amp;C::hello_helper, &amp;c);  // Static Class Method

pthread_create(&amp;t, NULL, &amp;hello_wrapper, &amp;c);  // Wrapper Function
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich C-Klassen-Memberfunktionen in pthreads verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage