Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:43
Es geht um meine BassVis!
@DelphiManiac
Nein ein Sleep geht nicht da diese den Thread einfriert.
@Luckie
Mein problem ist halt das aus irgendwelchen gründen die OpenGl Pugins nicht laufen.
Fenster werden initialisiert aber es findet keine Visualisierung statt.

Meine vermutung deshalb das die Threads in den OpenGL Plugins nicht beendet werden

Wenn ich nicht über die Winproc gehe dann funktionieren diese aber die Winamp5 Plugins nicht mehr.
Gehe ich über die Winproc dann wird nur das Fenster angezeigt findet aber keine Visualisierung statt
obwohl alle Module und Daten ohne Fehler aus dem Plugin ankommen.

Delphi-Quellcode:
  if (VisInfo^.Init) then

  begin

    VisWinCounter := VisCounter;
    Visinfo^.VisInfoCount := VisWinCounter;

    // Neuen Thread erstellen
    ThreadHandle := BeginThread(nil, 0, @WinampVisWin, VisInfo, 0, ThreadId);

    // DLL aus Speicher entfernen wenn ThreadHandle = 0
    if (ThreadHandle = 0) then
    begin
      FreeLibrary(VisDllHandle);
      FreeMem(VisInfo);

      BassFuncs^.SetError(BASS_ERROR_INIT);
      Exit;
    end;
    // Thread schließen
    CloseHandle(ThreadHandle);

//******************************************************
{
    //Open This for OpenGL it work
    //Only Winamp5 Plugins will not work when aktivate this
    //Einschalten um OpenGL Plugins zu testen
    //OpenGl geht mit Schließproblemen
    Repeat

    until DummyWindow <> 0;

    VisInfo^.WinHandle := DummyWindow;
    VisInfo^.VisModule^.Init(VisInfo^.VisModule);
}

//******************************************************
  end;
Wird der code in den kommentierten zeilen aktiviert dann funktioniert OpenGl.
Dazu muss aber in der Prozedure wo das DummyWindow erstellt wird

Delphi-Quellcode:
  //*********************************************
  // comment out for testing OpenGL
  //Ausschalten um OpenGL Plugins zu testen
  VisInfo^.WinHandle := DummyWindow;
  WinampVisExecute(Filename, Vismod, VismodCounter, VisInfo^.ParentHandle);

  WinampMenu := CreateMenu();
  PostMessage(DummyWindow, WM_INITWINAMP, 0, 0);

  sleep(25);
  // Bis hier Ausschalten
  //*********************************************

  while (GetMessage(Msg, 0, 0, 0)) do
diese zeilen bis GetMessage kommentiert(ausgeschaltet) werden.
Schlage mich mit dem Problem nun schon seit Monaten rum und finde keine vernünftige lösung
wie ich beides in einklang bringen kann.

Deshalb will ich jetzt mal mit Delay versuchen eine zwangspause einzulegen
die Threads dürfen dabei aber nicht unterbrochen werden.

EDIT:
Warum ich das vermute mit den threads der OpenGl Plugins
Wenn ich mit der Maus drüberfahre ist immer der Sanduhr Mauszeiger zu sehen.

gruss
  Mit Zitat antworten Zitat