AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delay ja aber wie in DLL ?

Ein Thema von EWeiss · begonnen am 1. Feb 2007 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 09:48
gibt es da ne unit die mit eingebunden werden muss ?
Application.ProzessMessages funktioniert ja nicht in der DLL

gruß
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 09:50
Application.Processmessages funktioniert in einer DLL genau wie in einer EXE
Was bringt dich zu der Annahme/Aussage das es nicht funktioniert?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 09:57
Zitat von SirThornberry:
Application.Processmessages funktioniert in einer DLL genau wie in einer EXE
Was bringt dich zu der Annahme/Aussage das es nicht funktioniert?
Weil es rot unterstrichen wird!
Miniaturansicht angehängter Grafiken
process_709.jpg  
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#4

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:02
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:05
Zitat von DelphiManiac:
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
Ja deshalb meine Frage! Habs mir schon gedacht.
Benötige aber keine Form
Und das einbinden der 'Untit Froms' vergrößert die DLL um einiges.

Gibt es da ne andere möglichkeit ?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:09
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#7

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:17
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

Sleep(x); reichen, oder?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:23
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:
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;
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.

Freundliche Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

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
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: Delay ja aber wie in DLL ?

  Alt 1. Feb 2007, 10:46
Zitat von marabu:
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:
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;
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.

Freundliche Grüße
JA genau! 100% erfasst.
Werde es damit mal versuchen.

Danke gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz