Thema: FastSwitch

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#26

AW: FastSwitch

  Alt 26. Dez 2013, 18:35
Zitat:
@Emil: Anstatt per sleep und in einer Repeat/Until-Schreife zu warten, bis der Thread fertig ist, kann man das auch über ein Event lösen: Du sagst dem Thread 'Hör auf' (per Message, wie gehabt) und wartest einfach ('WaitForSingleObject'), bis der Thread als letztes das Event setzt ('SetEvent').
HI..
Jo genau das habe ich ja gemacht. Siehe hier

Delphi-Quellcode:
hEvent := CreateEvent(nil, True, False, nil);
PostThreadMessage(RenderThreadId, WM_QUIT, 0, hEvent);
WaitRe := WaitForSingleObject(hEvent, 1000);
CloseHandle(hEvent);

SetEvent(Msg.LParam);
Aber es nutzt nichts.

Das nächste Plugin wird dann schon gestartet bevor der Thread überhaupt signalisieren kann.
Bei normalen starts signalisiert das Event und der Thread wird rechtzeitig beendet.
Aber nicht wenn die Plugins im MS Bereich geändert werden.

Anwendung / Mein Wrapper mit dem Thread (DLL) Plugins werden dann damit geladen wenn von der Anwendung angefordert.
Die Anwendung fordert das so schnell an das mein Thread da nicht mehr mitkommt.

Sah dann so aus

Delphi-Quellcode:
procedure TBASSSoVis.BassSonVisStop;
var
  hEvent, WaitRe: DWord;
begin
   EndByProgram := True;

   if (RenderThreadId <> 0) then
   begin
     hEvent := CreateEvent(nil, True, False, nil);
     PostThreadMessage(RenderThreadId, WM_QUIT, 0, hEvent);
     WaitRe := WaitForSingleObject(hEvent, 1000);
     CloseHandle(hEvent);
     
     if WaitRe = WAIT_OBJECT_0 then
        RenderThreadId := 0;

   end else
   BassSoVisFree := True;

end;
Das einzige was jetzt noch sein könnte..
BassSonVisStop kein Teil vom aktuellen Thread ist.

So wird der Thread erstellt.
Delphi-Quellcode:
SOThreadHandle := BeginThread(nil, 0, @SoVisThread,
                                      @BassSoVis.glCtrl,
                                      0, RenderThreadId);

Zitat:
Es geht ja hier um eine Konfiguration, die nicht ruckeln soll, wenn ein Plugin geladen/entladen wird
Ich weis jetzt nicht wie du ruckeln definierst..
Wenn du die AV damit meinst dann magst du recht haben.



gruss

Geändert von EWeiss (26. Dez 2013 um 22:27 Uhr)
  Mit Zitat antworten Zitat