![]() |
Delay ja aber wie in DLL ?
gibt es da ne unit die mit eingebunden werden muss ?
Application.ProzessMessages funktioniert ja nicht in der DLL gruß |
Re: Delay ja aber wie in DLL ?
Application.Processmessages funktioniert in einer DLL genau wie in einer EXE
Was bringt dich zu der Annahme/Aussage das es nicht funktioniert? |
Re: Delay ja aber wie in DLL ?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Delay ja aber wie in DLL ?
Hallo
Application.ProcessMessages überprüft ja die Message Pump ob neue Messages zu verarbeiten sind und arbeitet diese dann ab. Die Funktion gehört zum Namensraum (oder hier in Delphi zur Unit) Forms. Also muss diese auch in deiner DLL mit eingebunden werden, dann meckert der Compiler auch nicht mehr. Gruß DelphiManiac |
Re: Delay ja aber wie in DLL ?
Zitat:
Benötige aber keine Form ;) Und das einbinden der 'Untit Froms' vergrößert die DLL um einiges. Gibt es da ne andere möglichkeit ? |
Re: Delay ja aber wie in DLL ?
Warum muss die DLL Nachrichten abarbeiten? Hat sie ein Fenster? Hier scheint mir ein Designfehler vorzuliegen. Erklär uns doch mal, was die DLL macht / machen soll.
|
Re: Delay ja aber wie in DLL ?
Hi Luckie,
ich glaube hier geht es nicht darum, nur eine bestimmte Zeit zu warten. Ohne Messages abzuarbeiten (sind ja auch keine da wenn er keine Form hat. Wenn ich es richtig verstehe würde doch auch ein
Delphi-Quellcode:
reichen, oder?
Sleep(x);
|
Re: Delay ja aber wie in DLL ?
Hallo,
Emil will wahrscheinlich gar keine Nachrichten in der DLL verarbeiten, sondern nur ein Delay einbauen - und dabei soll die Nachrichten-Warteschlange vom main thread weiter bedient werden. Das kann seine Tücken haben, aber eine solche Warteschleife ist natürlich auch ohne die Unit Forms möglich:
Delphi-Quellcode:
Getippt und nicht getestet. So werden alle Nachrichten weiterverarbeitet - man könnte das einschränken. Wenn überhaupt keine Nachrichten verarbeitet werden sollen, dann kann man gleich Sleep() nehmen.
procedure Delay(ticks: Cardinal);
var Msg: TMsg; tc: Cardinal; begin tc := GetTickCount; while (GetTickCount - tc) < ticks do if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; Freundliche Grüße |
Re: Delay ja aber wie in DLL ?
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:
Wird der code in den kommentierten zeilen aktiviert dann funktioniert OpenGl.
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; Dazu muss aber in der Prozedure wo das DummyWindow erstellt wird
Delphi-Quellcode:
diese zeilen bis GetMessage kommentiert(ausgeschaltet) werden.
//*********************************************
// 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 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 |
Re: Delay ja aber wie in DLL ?
Zitat:
Werde es damit mal versuchen. Danke gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz