000
19.02.2007, 19:38 Uhr
~7513
Gast
|
Hallo, ich habe folgende Idee: In einen Prozess wird ein Thread gestartet 1. Thread - Eingabe und spätere Ausgabe eines Speicherarrays (z.Bsp. ein Bild). Dieser Thread initialisiert einen 2. Thread - Algorithmus zur Bildverbesserung (Black-Box, sollte nicht verändert werden).
Ablauf: 1. Thread - Einlesen des Speichersbereichs 2. Thread - beginnt mit der Arbeit über diesen Speicherbereich
nach einer gewissen Zeit 1. Thread - unterbricht den 2. Thread noch vor dessen Beendigung (notwendig, wenn die zur Verfügung stehende Zeit abgelaufen ist) 1. Thread - Ausgabe des Speicherbereichs
Erste Vorstellung einer Umsetzungsmöglichkeit (Pseudo- bzw. unvollständiger Code): //begin ... // Bilddaten zum Filter senden filter->setIn(image_in);
hThreadEnh = (HANDLE)_beginthreadex( NULL, 0, Run, NULL, CREATE_SUSPENDED, &uiThreadEnhID );
ResumeThread( hThreadEnh ); WaitForSingleObject( hThreadEnh, 20 ); SuspendThread(hThreadEnh);
// Bilddaten vom Filter holen filter->getOut(image_out);
//Kill thread ? ... //end
Das Problem ist nun sicherlich, dass der erzeugte Thread weiterhin existiert. Er sollte aber ganz verschwinden bzw. terminieren und seine reservierten Ressourcen wieder freigegeben. Der Befehl TerminateThread( hThreadEnh,0); reicht nach der Recherche einiger Posts im Forum wohl nicht aus. Auch der gut gemeinte Ratschlag des Auslaufens des Threads lässt sich nicht umsetzen.
Wie es möglicht, den Thread vorzeitig zu beenden? Oder exisitiert eine andere Möglichkeit der Umsetzung?
Vielen Dank für eure Antwort. |