C++ CreateThread Exceptions

Ich habe mir eine Klasse geschrieben, von der ich mehrere Objekte zur Laufzeit in unterschiedlichen Threads starten möchte.

Bis zu 3 Threads sind möglich, danach stürtzt das Programm ab.
An der Klasse kann es nicht liegen, es muss etwas mit dem Erzeugen der Threads zu tun haben:

Hier ist der Code (Auszug):
Code:
TObj *Obj[15]; //Maximal 15 Objekte von TObj sind möglich

DWORD WINAPI runThread(LPVOID data)
{
int nr=atoi((char*)data);
for(;;)
	{
		Obj[nr]->Start();
		if(WClose)return 0;
		Sleep((unsigned long)200);
	}
}

/*int main(){*/
	for(int i=0;i<StrToInt(Form1->Edit2->Text);++i)
	{
		Obj[i] = new TObj;
		Obj[i]->Name(Edit1->Text+IntToStr(i));
		CreateThread(NULL,0,runThread,IntToStr(i).c_str(),0);
		Sleep((unsigned long)25);
	}
/*}*/

Ich hoffe, jemand kann mir helfen.

mfg
 
Der Aufruf von CreateThread schaut eigentilch ok aus, jedoch sieht runThread ein bisschen buggy aus, kann das aber nicht genau sagen, da man ja nur einen kleinen Auszug aus deinem Code sieht...

hab das so getestet...
Code:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

DWORD WINAPI runThread(LPVOID data)
{
	int i = *(int*)data;
	while (1) {
		printf("runThread %i tid=%i\n",i,GetCurrentThreadId());
		
		Sleep(1000);
	}
}

int main(int argc,char **argv)
{
	int i;
	int tid;
	for (i=0;i<10;i++) {
		CreateThread(NULL,0,runThread,(void*)&i,0,&tid);
		printf("Thread erzeugt mit tid=%d",tid);
		Sleep(100);
	}

	system("pause");
	return 0;
}
 
Hallo mauralix und danke für deine Antwort.

Deine Konvertierungen sind da etwas schöner als meine, die werde ich gleich mit einbinden :)

Leider kommt es trotzdem zum Abbruch nach 3 Threads.

Ich habe jetzt versucht den Sleep wert in main zu erhöhen, und siehe da: Das Programm stürtzt nicht mehr ab.

Ich finde aber, dass das keine wirklich gute Lösung ist, denn der SleepWert variiert bestimmt, je nach CPU-Leistung.

Gibt es da eine Möglichkeit solange zu warten, bis ein Thread vollständig initialisiert wurde?
 
Zurück
Oben