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
hanspeter

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

AW: Multimedia Timer

  Alt 22. Jan 2013, 18:09
Ic hatte im Beispiel vergessen die Parameter (aus dem Interfaceteil anzugeben)
Hier der Nachtrag.

procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD);

Im Schweizer Forum ist ein Beispiel für den Multimedia Timer.
Dieses zeigt den gleichen Fehler. Nach etwa 6000 Zyklen kommt ein Stacküberlauf.
Ich gehe jetzt davon aus, dass das ein Delphi Fehler ist und der Timer unter XE2 nicht mehr funktioniert.

Gruß
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#2

AW: Multimedia Timer

  Alt 22. Jan 2013, 18:40
Hallo,

bei mir funzt der Timer unter XE2. Hast du schon mal im 2.Parameter (uResolution) eine 1 versucht? Müsste eigentlich ja ausreichen

EDIT: Hast du "Vcl.StdStyleActnCtrls" in die Uses-Liste aufgenommen?

Ausserdem: procedure TimerProc(uTimerID, uMessage, dwUser, dw1, dw2: DWORD); stdcall;

Geändert von musicman56 (22. Jan 2013 um 18:44 Uhr)
  Mit Zitat antworten Zitat
hanspeter

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

AW: Multimedia Timer

  Alt 22. Jan 2013, 21:06
Interesant,
wenn ich den 2.Parameter(uResolution) auf 1 setze, dann läuft es doppelt so lange.
Parameter 0 Absturz nach ca. 1400 Zyklen , Parameter 1 cy. 2400 Zyklen dann Absturz.

Hier ist nochmal das ganze Programm:

Delphi-Quellcode:
unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MMSystem;

type
  TForm5 = class(TForm)
    lbl1: TLabel;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

var
  mmResult: Integer;
  anz : integer;
procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); pascal;
begin
  if Form5.lbl1.Caption = 'Tickthen Form5.lbl1.Caption:= 'Tack'
  else
   Form5.lbl1.Caption := 'Tick';
  inc(anz);
  Form5.lbl2.Caption := inttostr(anz);
end;


procedure TForm5.btn1Click(Sender: TObject);
begin
  anz := 0;
  mmResult := TimeSetEvent(10, 1, @TimeCallBack, 0, TIME_PERIODIC);
end;

end.
Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Multimedia Timer

  Alt 22. Jan 2013, 22:53
Das TimerEvent kommt in einem eigene Thread daher und greift unsynchronisiert auf die VCL zu. Wenn Du die VCL-Zugriffe weglässt läuft es.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
hanspeter

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

AW: Multimedia Timer

  Alt 23. Jan 2013, 09:56
Das TimerEvent kommt in einem eigene Thread daher und greift unsynchronisiert auf die VCL zu. Wenn Du die VCL-Zugriffe weglässt läuft es.
Daran liegt es auch nicht.
Sobald ich in der Callbackroutine etwas mache (z.B. nur ein globales Flag setzen) kommt der Fehler.
Ich habe jetzt mal aus zwei Opensource Projekten die auf dem gleichen Prinzip gelösten Highres Timer ausprobiert.
Hier kommt der gleiche Fehler.
(New Audio Components package und basdll)
Da die Routine unter Delphi 7/Win 7 schon mal funktionierte, liegt es an Windows 8 oder XE2.
(Ein Kollege hat ausprobiert unter C# funktioniert diese Routine.)
Da TimeSetEvent ohnehin obsolet ist, probiere ich jetzt mal die Alternative.

Gruß Peter
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#6

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.669 Beiträge
 
Delphi 12 Athens
 
#7

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
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:11 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