„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich C ++ -Klass -Mitgliederfunktionen aus Threads sicher aufrufen?

Wie kann ich C ++ -Klass -Mitgliederfunktionen aus Threads sicher aufrufen?

Gepostet am 2025-03-04
Durchsuche:943

How Can I Safely Call C   Class Member Functions from Threads?

Klassenmitglied Funktionen in Threads sicher anrufen Diese Aufgabe kann jedoch Herausforderungen aufgrund des verborgenen "diesen" Parameter in C -Klassenmitglied -Funktionen darstellen.

In Anbetracht der folgenden:

Klasse C { void *print (void *) {cout

class C {
    void *print(void *) { cout  

vector Klassen; pthread_t t1; classes.push_back (c ()); classes.push_back (c ());

vector classes;
pthread_t t1;
classes.push_back(C());
classes.push_back(C());

pthread_create (& t1, null, & c [0] .Print, null);

pthread_create(&t1, NULL, &c[0].print, NULL);
. (Tree_Item ::*) (void*) ’bis 'void*(*) (void*)'

Das Problem ergibt Pointer
pthread_create(&t1, NULL, &c[0].print, NULL);
, um diese Hürde zu überwinden, haben Sie zwei Optionen:

statische Klassenmethode

Eine statische Klassenmethode hat keinen "diesen" Parameter und kann direkt ohne eine Instanz der Klasse aufgerufen werden. So können Sie eine statische Klassenmethode für die Hallo -Funktion implementieren:

Klasse C { öffentlich: static void *Hallo (void *) {std :: cout dann können Sie einen Thread mit der statischen Klassenmethode erstellen:

pThread_create (& t, null, & c :: hello, null);
pthread_create(&t1, NULL, &c[0].print, NULL);
Funktionszeiger

[arepa. Dieser Funktionszeiger kann dann verwendet werden, um einen Thread zu erstellen.

pthread_create(&t, NULL, &C::hello, NULL);

wobei Hello_helper definiert ist als:

void *hello_helper (void *context) {return ((c *) Kontext-> Hallo (); }

C c;
pthread_create(&t, NULL, &C::hello_helper, &c);
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3