Zum Inhalt springen

Programm wird inaktiv (nicht mehr ansprechbar)! Wie Abhilfe??


DeBrainBoy

Empfohlene Beiträge

Hallo Ihrs!

Hab wiedereinmal ein Problem mit meinem Programm!

Umgebung: Visual C++ 6.0

Folgendes:

Ich muß Logs nach Domainnamen splitten (Testdateien mit bis zu 50MB Größe). Aus einem Log werden dann ca. 6 andere kleine Logs! Nun mein Problem, sobald ich auf splitten klicke, fängt das Programm ganz normal mit der Verarbeitung an! ABER das Programm ist nun nicht mehr aktiv! Das heißt ich kann es weder verschieben noch sehen wenn ich zwischendurch ein anderes Fenster öffne! Die CPU Last liegt auf 100% und im Task Manager steht "Keine Rückmeldung"! ABER das Programm arbeitet ohne Probleme! Keine Fehler, nix! Sobald alle Logs verarbeitet sind, steht mir das Programm sofort wieder zur Verfügung! Wie kann ich da Abhilfe schaffen?? Muß doch irgendwie gehen oder??

Schonmal vielen Dank für Eure Antworten und bis dann

**DeBrainBoy**

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der TaskManager von Windows hat seine ganz eigene Auffassung von Prozesszuständen. 'Wird ausgeführt' bedeutet eigentlich 'Wartet', und 'Keine Rückmeldung' heißt soviel wie 'Hat viel zu tun'.

Dass Dein Programm, nicht mehr reagiert während es arbeitet, liegt daran, dass der einzige Thread Deiner Anwendung beschäftigt ist. Wenn Du das umgehen willst, dann musst Du einen weiteren Thread starten, der dann die Arbeit erledigt (einen Worker-Thread, wie MS das nennt). Dann kann der erste Thread (der User-Interface-Thread) weiterhin dafür sorgen, dass das Fenster sich so verhält, wie man es von einem Fenster erwartet. Dann ist auch der TaskManager zufrieden.

Ein zweiter Thread bringt allerdings einige neue Probleme mit sich. Der 'Splitten'-Button (oder Menü-Eintrag, was auch immer) muss auf 'disabled' gesetzt werden, damit man nicht noch einen dritten Thread starten kann, während der zweite noch läuft. Außerdem solltest Du verhindern, dass das Programm beendet wird, während der Worker-Thread noch läuft, damit die Anwendung in einem definierten Zustand terminiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also als erstes brauchst Du eine Thread-Funktion. Rückgabetyp und Parameter sind hierbei festgelegt. Die Thread-Funktion muss entweder global oder statisch sein, damit kein zusätzlicher this-pointer mit übergeben wird.

Damit die Thread-Funktion auf die Member Deiner Klasse zugreifen kann, übergibt man meist einen this-Pointer an einen "Threadstart-Funktion", die dann die eigentliche Threadfunktion aufruft.


// YourDlg.h
class CYourDlg : public CDialog:
...
static UINT __stdcall tmpWorkerThread( void* pParam );
void WorkerThread();
...


// YourDlg.cpp
UINT CYourDlg::tmpWorkerThread( void* pThis )
{
CYourDlg* pDlg = (CYourDlg*) pThis;
pDlg->WorkerThread();
}

void CYourDlg::WorkerThread()
{
// was auch immer getan werden muss
}
[/code] Den Thread startest Du dann mit
[code]
HANDLE hThread = (HANDLE) _beginthread( tmpWorkerThread, 0, this);
CloseHandle( hThread );

Ganz wichtig, leider hab ich die Namen hier nur auf Englisch: In den Projekt-Settings, Register C/C++, Use run-time library: eine Multithreading-Runtime auswählen, in Deinem Fall vermutlich am besten "Debug Multithreaded DLL".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...