Thema: FastSwitch

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#36

AW: FastSwitch

  Alt 27. Dez 2013, 17:03
Es scheint mir das die bisherigen Lösungen nicht zum ziel führen.

Delphi-Quellcode:
procedure TBASSSoVis.BassSonVisStop;
var
  WaitRe: Cardinal;
begin
  EndByProgram := True;

  if (RenderThreadId <> 0) then
  begin
    PostThreadMessage(RenderThreadId, WM_QUIT, 0, 0);
    hEventFree := CreateEvent(nil, True, False, nil);
    try
      repeat
        WaitRe := WaitForSingleObject(hEventFree, 15);
        if WaitRe <> WAIT_OBJECT_0 then
          WinProcessMessages;
      until WaitRe = WAIT_OBJECT_0;
    finally
      RenderThreadId := 0;
      BassSoVisFree := True;
    end;

  end else
  BassSoVisFree := True;

end;
WaitForSingleObject blockiert den Thread das ist aber nicht das was ich will
Rufe ich diese mit einer Wartezeit von 2000 auf dann blockiert/wartet der Thread bis diese zeit um ist.
wurde in dieser zeit das Event gefeuert (was aufgrund des Blockierten Threads nicht geht) wird mein Flag auf true gesetzt.
Das trifft aber niemals ein wenn das Event aus dem Thread abgefeuert wird. Also muss ein repeat her
und dann habe ich genau das was ich vorher auch hatte.

Dann kann ich genauso wie bisher Sleep(15) verwenden bleibt sich dann gleich.
Mit nur einem Thread ist das sinnlos es sei denn das Event wird wie in deinem Beispiel external also von außerhalb abgefeuert.

Und dort feuere ich ja quasi ein Event über BassVis_Free; (auch wenn es eine procedure ist)

gruss

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