Zu viele Threads oder Files ?

colblake

Erfahrenes Mitglied
Hiho,

Daten: MFC++6.0

das ist jetzt nicht ein wirkliches Problem, aber interesieren tut es mich trotz dem.

Ich habe ein Programm geschrieben welches bis zu 1024 threads startet. In jedem thread wird eine neue Datei auf der lokalen Platte angelegt. Wenn ich jetzt so ca 400 dieser threads in Gang setze, terminieren manche davon mit einem Runtime Error.

Nun die Fragen:
Existiert eine BS beschränkung für das erstellen von Threads,die alle von einem Initialen Thread stammen ?
Existiert eine BS beschränkung für das erstellen von Dateien ?

Danke schonmal.
Col.Blake
 
hm,
ich glaub ich hab ich geirrt. Das hat nix mit der Anzahl zu tun,sondern mit was anderem.

Was macht das Programm? Jeder thread laed eine HTML-Seite aus dem Netz und speichert sie in ein bestimmtes Dir lokal ab.

Vermutung: Wenn ein document nicht herunterlladbar ist, kommt der Fehler.Dh der Thread wird irgendwie unterbrochen und Windows erkennt das als Fehler und beendet mein ganzes Programm.

More Infos:
Die Fehlermeldung:
-----------------------------------------------------
Runtime Error!
Programm: c:/.../meinprogramm.exe
abnormal program termination
-----------------------------------------------------

meine Thread-Methode
Code:
UINT SaveURL(LPVOID hh)
{
	TreadCount++;                                  //Globale zaehlvariable inkrementieren
	CStdioFile *fp=NULL;
	char buff[2];
	CInternetSession s("d");
	CString str="",tmp="",Name="";
	
	Name.Format("%s%s-%07d%s",((TREAT_STRUCKT*)hh)->h->SavePath,GetTime(),((TREAT_STRUCKT*)hh)->h->Namenzahl++,((TREAT_STRUCKT*)hh)->h->strSuchKriterium);
	TRY
	{
		CFile f( Name, CFile::modeCreate | CFile::modeWrite );
		if (f==NULL)
		{
			s.Close();
			return 0;
		}
		if((fp = s.OpenURL(((TREAT_STRUCKT*)hh)->path))==NULL)
		{
			f.Close();s.Close();return 0;
		}
		while(fp->Read(buff,1))
		{
			f.Write(buff,1);
		}
		delete fp;
		f.Close();
	}
	CATCH (CFileException, e)
	{
	}
	END_CATCH;
	s.Close();
	TreadCount--;                      //Globale zaehlvariable dekrementieren
	return 0;
}

Die Aufrufende Funktion:
Code:
//struct TREAT_STRUCKT
//{
//	CString path;
//	CLoaderDlg *h;
//};

bool save(CLoaderDlg* h)
{
	TREAT_STRUCKT *p_s1;
	CWinThread *t1;
	
	for (int sch=0;sch<1024;sch++)
	{
		if(h->strings[sch]!="")
		{
			p_s1=new(TREAT_STRUCKT);
			p_s1->h=h;p_s1->path=h->PicURLstrings[sch];
			t1=new CWinThread;
			t1=AfxBeginThread(SaveURL,p_s1,THREAD_PRIORITY_NORMAL);
		}
	}
	return true;
}
Kann mir jemand nen tip geben wie ich diesen Fehler beseitigen kann?Bzw wo mein Fehler ist .

Col.Blake
 
Du fängst nur die File Exception. Wenn eine Internet Exception (im CInternetSession Konstruktor oder bei OpenURL) ausgelöst wird, führt das wohl zum Programmabbruch.
 

Neue Beiträge

Zurück