AGB  ·  Datenschutz  ·  Impressum  







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

Multimedia Timer

Ein Thema von hanspeter · begonnen am 22. Jan 2013 · letzter Beitrag vom 15. Jun 2013
Antwort Antwort
musicman56
(Gast)

n/a Beiträge
 
#1

AW: Multimedia Timer

  Alt 23. Jan 2013, 12:40
[QUOTE=hanspeter;1200197]
Da TimeSetEvent ohnehin obsolet ist, probiere ich jetzt mal die Alternative.
Wieso ist das obsolet? Habe nichts darüber gefunden.

Und nochmals: Unter XE2 funktioniert der Timer bei mit einwandfrei. Nimm die VCL-Komponente, füge manuell "Vcl.StdStyleActnCtrls" zur Uses-Liste, dann tut's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#2

AW: Multimedia Timer

  Alt 23. Jan 2013, 13:36
Wieso ist das obsolet? Habe nichts darüber gefunden.
Wo hast Du denn geschaut? timeSetEvent:
Zitat:
Note This function is obsolete. New applications should use CreateTimerQueueTimer to create a timer-queue timer.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Multimedia Timer

  Alt 23. Jan 2013, 14:48
Also um das Thema abzuschließen.
timeSetEvent funktioniert unter XE2 und W8 nicht.
Nach ca. 1500 Zyklen tritt ein Stack-Überlauf auf.
timeSetEvent wollte ich nutzen um einen Takt für eine Steuerung 1ms/10ms/100ms zu erzeugen.
Mit 2 Opensource Highres Timern trat das gleiche Problem auf.
Irgendwo hier im Forum wird erwähnt das timeSetEvent veraltert ist und besser CreateTimerQueueTimer verwendet wird.
Ich habe das Problem jetzt mit CreateTimerQueueTimer gelöst.
Jetzt funktioniert es in der gewünschten Form.
Für Interessenten, in der Anlage mal die komplette Lösung.

Gruß
Peter


Delphi-Quellcode:
unit UpProcess;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, System.SyncObjs, engbaslib, MMSystem, Vcl.StdStyleActnCtrls;

  type
    pCallback = procedure of Object;

type
  TProcessRun = class(TThread)
  private
    aPause : integer;
    FCS : TCriticalSection;
  protected
    procedure Execute; override;
  public
    run1ms : boolean;
    TimeTakt : int64;
    TimeTakt10 : integer;
    TimeTakt100 : integer;
    TimeTakt1000 : integer;
    Pause : integer;
    Callback1ms : pCallback;
    Callback10ms : pCallback;
    Callback100ms : pCallback;
    Callback1000ms: pCallback;
    Constructor Create;overload;
    destructor Destroy; override;
    procedure Stopp;
  end;

Var
  FTimer: THandle;
  run: TProcessRun;

implementation

procedure WaitOrTimer(Context: Pointer; Success: Boolean) stdcall;
begin
  inc(run.TimeTakt10);
  inc(run.TimeTakt100);
  inc(run.TimeTakt1000);
  run.run1ms := true;
end;

Constructor TProcessRun.Create;
begin
  Self.Create(true);
  FreeOnTerminate:=true;
  Priority:= tpHighest;
  TimeTakt := 0;
  TimeTakt10 := 0;
  TimeTakt100 := 0;
  TimeTakt1000 := 0;
  Pause := 0;
  FCS := TCriticalSection.Create;
  if not CreateTimerQueueTimer(FTimer, 0, WaitOrTimer, 0, 0, 1,
    WT_EXECUTEINTIMERTHREAD) then
    FTimer := 0;
end;

destructor TProcessRun.Destroy;
begin
  Stopp;
  freeandnil(FCS);
  inherited;
end;

procedure TProcessRun.Stopp;
begin
  if FTimer <> 0 then
   begin
     DeleteTimerQueueTimer(0, FTimer, 1);
     FTimer := 0;
   end;
end;

{ TProcessRun }

procedure TProcessRun.Execute;
begin
  NameThreadForDebugging('Processrun');
  while not Terminated do
  begin
    inc(aPause);
    if run1ms then
    begin
      run1ms := false;
      Pause := aPause;
      aPause := 0;
      // FCS.Enter;

      if Assigned(Callback1ms) then
      begin
        Synchronize(Callback1ms);
      end;

      if TimeTakt10 >= 10 then
      begin
        TimeTakt10 := 0;
        if Assigned(Callback10ms) then Synchronize(Callback10ms);
      end;

      if TimeTakt100 >= 100 then
      begin
        TimeTakt100 := 0;
        if Assigned(Callback100ms) then Synchronize(Callback100ms);
      end;

      if TimeTakt1000 >= 1000 then
      begin
        TimeTakt1000 := 0;
        if Assigned(Callback1000ms) then Synchronize(Callback1000ms);
      end;
  // FCS.Leave;
    end;
  end;
end;

end
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#4

AW: Multimedia Timer

  Alt 15. Jun 2013, 13:32
Ich habe das Problem, dass bei dieser Zeile:
mmResult := TimeSetEvent(10, 0, @TimeCallBack, 0, TIME_PERIODIC); folgenden Fehler bekomme:
Code:
Variable erforderlich
Woran liegt das?

Liebe Grüße
loirad
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Multimedia Timer

  Alt 15. Jun 2013, 14:48
Kannst du dich auf einen Thread beschränken ?
DANKE!

Crosspost
http://www.delphipraxis.net/1218660-post3.html

gruss
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#6

AW: Multimedia Timer

  Alt 15. Jun 2013, 15:20
Zitat:
Kannst du dich auf einen Thread beschränken ?
DANKE!

Crosspost
Entschuldigung - ich wollte es erst nur in diesem Topic stellen, dachte mir dann aber, dass es ja auch ins ursprüngliche mehr oder weniger reinpasst.
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:19 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