Warning: Table './usr_web1030_3/variable' is marked as crashed and should be repaired query: SELECT * FROM variable in /var/www/web1030/html/mkernel.de/includes/database.mysql.inc on line 128

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web1030/html/mkernel.de/includes/database.mysql.inc:128) in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 726

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web1030/html/mkernel.de/includes/database.mysql.inc:128) in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 727

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web1030/html/mkernel.de/includes/database.mysql.inc:128) in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 728

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web1030/html/mkernel.de/includes/database.mysql.inc:128) in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 729
[Coder's Implementation{C#}] Hochauflösender Timer | Drupal

[Coder's Implementation{C#}] Hochauflösender Timer

  • warning: Cannot modify header information - headers already sent by (output started at /var/www/web1030/html/mkernel.de/includes/database.mysql.inc:128) in /var/www/web1030/html/mkernel.de/includes/common.inc on line 148.
  • user warning: Table './usr_web1030_3/variable' is marked as crashed and should be repaired query: UPDATE variable SET value = 'a:17:{i:0;i:62;i:1;i:61;i:2;i:59;i:3;i:31;i:4;i:30;i:5;i:29;i:6;i:24;i:7;i:21;i:8;i:15;i:9;i:14;i:10;i:11;i:11;i:7;i:12;i:6;i:13;i:5;i:14;i:3;i:15;i:2;i:16;i:1;}' WHERE name = 'menu_masks' in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 609.
  • user warning: Table './usr_web1030_3/variable' is marked as crashed and should be repaired query: UPDATE variable SET value = 'a:0:{}' WHERE name = 'menu_expanded' in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 609.
  • user warning: Table './usr_web1030_3/variable' is marked as crashed and should be repaired query: DELETE FROM variable WHERE name = 'menu_rebuild_needed' in /var/www/web1030/html/mkernel.de/includes/bootstrap.inc on line 634.

Aufgrund eines aktuellen Anwendungsfalles habe ich eine Timerklasse in C# entwickelt, die sehr flexibel ist. Hinzu kam noch die Tatsache, das Timer eins dieser nicht endenden Probleme ist, die in jedem Projekt neu gelöst werden.

Es handelt sich dabei um einen frei einstellbaren Timer, der auf einem Hintergrundthread und den Funktionen QueryPerformanceCounter und QueryPerformanceFrequency basiert. Er hat eine Reihe von Eigenschaften:

  • Interval (double, in ms)
  • SleepMethod (Thread.Sleep / Thread.SpinWait)
  • SleepTime (double, in ms / Parameter für SpinWait)
  • TimerCallBack
  • TimerMode (ReduceSleep / FireBefore, FireAfter)
  • TimeWindow (double, in ms)

Mit Interval und TimeWindow wird vorgegeben, wann der Timer auslösen soll. Interval gibt das Zeitintervall zwischen zwei Ereignissen vor, mit dem TimeWindow kann ein Bereich um das Zielinterval herum definiert werden, in dem der Timer auslösen darf. Der Modus gibt an, wie sich der Timer verhalten soll, wenn er nicht innerhalb des Zeitramens (Interval-TimeWindow bis Interval+TimeWindow) auslösen kann. Bei ReduceSleep wird die Pausenzeit reduziert in der Hoffnung, dadurch das Zeitfenster noch zu erreichen. FireBefore lässt den Timer vor dem Zeitfenster auslösen, FireAfter das Zeitfenster verstreichen.

Über SleepTime und die SleepMethod kann die Genauigkeit und CPU-Last des Timers eingestellt werden. Steht SleepMethod auf Sleep, so legt sich der Thread des Timers schlafen. Dadurch steigt jedoch seine Latenz. Bei Tests lag die Latenz des Timers bei 15 ms, es ist also recht grob auflösend. Für feiner auflösende Timer empfielt sich SpinWait. Das belastet die CPU und sorgt dafür, das der Timer nahezu perfekt (der jitter liegt bei 0,00X ms) auslöst. Im Projekt ist ein kleines Beispielprogramm enthalten.

Das Projekt ist zwar mit den 2008er Entwicklertools erstellt, man kann die Quellen jedoch auch in ein 2005er Projekt importieren und damit übersetzen, es werden keine neuen Features verwendet.