Threads mit C starten und beenden? Hilfe

danke für deine schnelle Antwort !

wenn ich das mache bekomme ich folgende Fehlermeldung

das Problem ist der Zugriff auf den Pointer in der Funktion

Fehler 1 error C2100: Ungültige Dereferenzierung.
Fehler 2 error C2446: '==': Keine Konvertierung von 'int' in 'void *'
Fehler 3 error C2040: '==': 'void *' unterscheidet sich von 'int' in Bezug auf die Anzahl vorgenommener Dereferenzierungen



Code:
#include "stdafx.h"
#include <process.h>
#include <conio.h> 
#include <time.h>






double zaehler=0;
int check=0;

void  counter(void *dummy )
	{	
		
		 while(1)
		 {
			zaehler++;
			if(*dummy==1)
			{
				break;
			}
					
		}

		_endthread();
	}

int _tmain(int argc, _TCHAR* argv[])
{
	
	int a=0;
	 _beginthread(counter, 0,&a); 
	

	printf("Bitte geben Sie die 1 ein um den Thread zu stoppen\n");
	scanf("%i",&a);
	fflush(stdin);
	printf("Thread hat in der Schleife  %f x  gezaehlt\n",zaehler);	
	getch();
	return 0;
}

Gruß DrBrain
 
Du musst das casten

Wenn du es im Thread öfters verwendest, mach am besten am Threadanfang sowas:
int &asd=*((int *)dummy);
Wenn es was anderes wie int ist, Tausch die Variablentypen einfach aus
Das asd ersetzt du halt durch einen Variablennamen, mit dem du die int im Thread jetzt ganz normal ansprechen kannst, ohne * etc.

Scheint zwar auf den ersten Blick etwas sinnlos, jetzt einen void* übergeben zu müssen, aber es hat den Vorteil, dass man jeden beliebigen Variablentyp "Übergeben" kann.

PS: Wenn du keine einzelne Variable, sondern zB ein char-Array drüberbringen willst, ändern sich zwei Sachen:
-Beim dritten Parameter vom beginthread fällt das & weg
-int &asd=*((int *)dummy);
wird (bei char-array) zu
char *asd=(char *)dummy;
 
Zuletzt bearbeitet:
ich sag erstmal vielen Dank für deine Hilfe :-)

wir haben in der Schule Casten sehr ausführlich durchgenommen jedoch verstehte ich deine Casting Geschichte nicht so ganz :-(

-int &asd=*((int *)dummy);

der rechte Befehl castet ja den void * dummy in ein int *
aber den linken Teil verstehe ich nicht so ganz :-(

Gruß DrBrain


thx :-)
 
Also mit dem ((int *)dummy) kennst du dich aus
Das ganze mit dem Stern davor dereferenziert den Pointer, du kommst also wieder zum Wert davon
Und damit du nicht jedesmal (*((int *)dummy)) statt einem normalen Variablennamen schreiben musst, Habe ich mit dem "int &asd=..." eine Referenz auf das ganze erzeugt

Referenzen kann man so circa als selbst deref. Pointer verstehen, also einfach ausgedrückt ein Pointer, in dem du Beim Zugreifen auf den Wert den * weglassen kannst

Anders ausgedrückt hat die Variable jetzt einfach einen zweiten Namen bekommen :),
sind aber eben beide die gleiche Variable und ändern auch gemeinsam den Wert.

Gruß
 
Zurück