_beginthreadex Error



  • Okay machen wa es einfach mal so:
    Ich habe diese beiden Threadfunktionen, wobei Bearbeiten nicht komplett ist aber alles, was ich bis jetzt nicht auskommentiert habe!
    Wenn ich also erst 4x Bearbeiten und 1x MoveFiles aufrufe, dann tritt nach dem o.g. Aufruf der Fehler ENOMEM oder halt Fehlercode 8 auf!
    Keine Sorgen, die beiden Funktionen sind nicht fertig und ich werde dort noch vieles anders machen, nur erstmal möchte ich diesen scheiss Error loswerden!

    Zu meinem System: Es hat 4 GB Arbeitsspeicher und 10 GB Auslagerungsdatei und daher kann es an dem Speicher NICHT mangeln, zudem verbraucht das Programm im Taskmanager gerade mal 3 MB!

    unsigned __stdcall TForm1::Bearbeiten(void *param)
    {
            AnsiString* Dateiarray = static_cast<AnsiString*>(param);
    
    	EnterCriticalSection(&cs);
    	CSThreadAnz++;
    	BearbeitenAnz++;
    	LeaveCriticalSection(&cs);
    
    	while(1)
    	{
    		if(BearbeitenAnz==1)
    		{
    			OpenSemaphore(SEMAPHORE_ALL_ACCESS,true,"ECBearbeiten");
    		}
    
    		for(unsigned int z=1;z<atoi(Dateiarray[0].c_str());z++)
    		{
    
    			AnsiString Dateiname=Dateiarray[z];
    			int fileSize=atoi(Dateiarray[++z].c_str());
    
    			if(!(Dateiname.AnsiPos("\\tmp\\")))
    			{
    				EnterCriticalSection(&cs3);
    				CopylistFrom->Add(Form1->Frame31->Edit1->Text+"\\"+Dateiname);
    				CopylistTo->Add(Form1->Frame31->Edit1->Text+"\\tmp\\"+Dateiname);
    				LeaveCriticalSection(&cs3);
    
    			}
    		}
    		WaitForSingleObject(OpenSemaphore(SEMAPHORE_ALL_ACCESS,true,"ECBearbeiten"),INFINITE);
    	}
    	return 0;
    }
    
    unsigned __stdcall TForm1::MoveFiles(void *param)
    {
    	EnterCriticalSection(&cs);
    	CSThreadAnz++;
    	Kopieren=true;
    	LeaveCriticalSection(&cs);
    
    	while(1)
    	{
    		while(CopylistFrom->Count!=0)
    		{
    			EnterCriticalSection(&cs3);
    			AnsiString From=CopylistFrom->Strings[0];
    			AnsiString To=CopylistTo->Strings[0];
    			CopylistFrom->Delete(0);
    			CopylistTo->Delete(0);
    			LeaveCriticalSection(&cs3);
    
    			MoveFileEx(From.c_str(),To.c_str(),MOVEFILE_COPY_ALLOWED);
    
    			AnsiString error=GetLastError();
    
    			if(80==error)
    				MoveFileEx(From.c_str(),(To+"_"+Exists++).c_str(),MOVEFILE_COPY_ALLOWED);
    		}
    		WaitForSingleObject(OpenSemaphore(SEMAPHORE_ALL_ACCESS,true,"ECBearbeiten"),INFINITE);
    	}
    
    	EnterCriticalSection(&cs);
    	CSThreadAnz--;
    	Kopieren=false;
    	LeaveCriticalSection(&cs);
    
    	return 0;
    }
    


  • Hat denn keiner ne Ahnung, woran das liegen kann mit diesem Fehler??



  • So, ich habe endlich den Fehler beheben können!
    Es lag an den Compilereinstellungen!

    Es gibt bei Borland noch eine Release- Konfiguration und ich habe einfach die Optionen an die Debug- Konfiguration angeglichen, sodass ich aber noch die Debug- Funktionen habe!



  • Scherz?


Anmelden zum Antworten