Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Guten Morgen,

ich habe vorhin angefangen mit etwas mit Threads in C++ zu beschäftigen und möchte nun welche in ein bestehendes Programm eincoden.

Hierzu soll mir ein Thread eine Methode einer Klasse aufrufen. Wie genau kann ich der Threadfunktion die Instanz der Klasse übergeben? Die MSDN Infos zum Thema haben mich nur mehr verwirrt.

Wäre toll wenn mir da jemand helfen könnte.

VG

GeneralB


const int iMaxTNum = 5;
int toQuit = 0;

struct targ
{
int val;
};

DWORD WINAPI bla( void* param );

[ ... meine Klassen ... ]

Threads[1] = CreateThread( NULL, 0, bla, (void*)&ThreadArgs[1], 0, (LPDWORD)&ThreadIDs[ 1 ] );
// Aufruf

[...]

DWORD WINAPI bla( void* param )
{
targ *threadarg = (targ*)param;

while( toQuit != threadarg->val )
{
cout << "Tick\n";
Sleep( 500 );
//param->getOrt();
}

return 0;
}
[/PHP]

Geschrieben

Erweitere die Struktur targ, z.B. um einen Zeiger auf deine Klasseninstanz.

Du solltest übrigens nicht CreateThread benutzen, wenn du in der Threadfunktion Funktionen der C-Standardbibliothek aufrufst. Benutz besser _beginthreadex.

Geschrieben

habe hier ein paar Codestücke vergessen...

const int iMaxTNum = 5;

int toQuit = 0;

DWORD WINAPI bla( void* param );

[ ... Klassen ... ]

struct targ

{

int val;

Person &player;

};

targ ThreadArgs[ iMaxTNum ];

int ThreadIDs[ iMaxTNum ];

HANDLE Threads[ iMaxTNum ];

ThreadArgs[1].val = 1;

Threads[1] = CreateThread( NULL, 0, bla, (void*)&ThreadArgs[1], 0, (LPDWORD)&ThreadIDs[ 1 ] );

[ ... Rest von main ... ]

DWORD WINAPI bla( void *player )

{

//targ *threadarg = (targ*)player;

int check = 1;

while( check == 1 )

{

cout << "Tick\n";

Sleep( 500 );

}

return 0;

}

Muss dazu sagen, dass ich bisher keine Ahnung von Threads habe, auch die Argumente sind mir etwas schleierhaft.

Geschrieben

So, mein Problem hat sich gelöst. Der Fehler war das umcasten.

Threads[1] = CreateThread( NULL, 0, bla, (void*)&player, 0, (LPDWORD)&ThreadIDs[ 1 ] );

// Fettes muss void sein, deswegen unten wieder der recast

[...]

DWORD WINAPI bla( void* param )

{

Person* player = (Person*) param;

}

Geschrieben
So, mein Problem hat sich gelöst. Der Fehler war das umcasten.
Das ist keine gute Lösung. Auf diese Art und Weise kannst du nämlich immer nur einen Parameter übergeben. Wer immer die Struktur targ eingeführt hat, wird sich doch etwas dabei gedacht haben. Der Parameter val ist jetzt beispielsweise nicht mehr verfügbar. Und sobald du noch etwas anderes übergeben musst, musst du doch wieder die Struktur benutzen.

Du solltest übrigens einen Zeiger (Player*) hinzufügen. Player& ist eine Referenz. Geht auch, muss dann aber bereits bei der Initialisierung mit einer gültigen Instanz verbunden werden. Nachträgliche Zuweisung geht nicht.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...