![]() |
ASIO Callback nur bei Mausbewegung
Hallo,
Hier tritt mit einem ASIO Gerät der folgende Fehler auf , dass ich nicht verstehe. Es ist eine kleine Testanwendung, in der nur die vom Treiber zurückgemeldeten Werte (Sampleposition und -Zeit) angezeigt werden. Mit vielen Treibern (u.a. ASIO4ALL) läuft das wunderbar. Mit einem Treiber passiert aber folgendes: Es kommt ein Callback, dann passiert erstmal nix mehr. Bewegt man nun die Maus, dann läuft die Anzeige ganz normal hoch, aber nur solange man die Maus wirklich bewegt. Die Anzeige läuft dann kontinuierlich, auch springt sie nicht, d.h. die erste Vermutung des fehlenden Updates der Anzeige ist es nicht. Das wirklich verrückte (finde ich) ist, dass der Effekt auch auftritt, wenn die Anwendung nicht den Focus hat, d.h. bei einer Mausbewegung in einem anderen Fenster läuft es, solange man die Maus bewegt. Mein System ist win10/64, Delphi 10.3 |
AW: ASIO Callback nur bei Mausbewegung
Wie/Wo kommt der Callback an?
* im Hauptthread * im einem eigenen Thread * falls im Thread, wird und wenn ja wie wird synchronisiert? Wenn die Anzeige/Verarbeitung im Haupthread ankommt/verarbeitet Wenn etwas in den Hauptthread synchronisiert wird, aber das Benachrictigungsevent nicht annkommt / nicht gesendet wird, und der hauptthread ist grade im Idle, dann wartet er bis zur nächsten Message (z.B. von der Maus). |
AW: ASIO Callback nur bei Mausbewegung
Dem Treiber wird eine Callbackfunktion übergeben, die dann vom Treiber aufgerufen wird (werden soll) wenn er Daten hat bzw. braucht.
In der konkreten Situation sieht das ganze so aus
Code:
Was mich eben verwirrt, ist das die Sampleposition sich immer um die Buffergröße erhöht. Wenn es ein Problem mit der Synchronisation / Nachricht wäre, dann müsste der Zähler ja 'hupfen'.
procedure TMainForm.BufferSwitchTimeInfo(index: integer; const params: TAsioTime);
begin // tell the interface that the sample position has changed PostMessage(Handle, PM_UpdateSamplePos, params.timeInfo.samplePosition.hi, params.timeInfo.samplePosition.lo); Driver.OutputReady; // some asio drivers require this end; |
AW: ASIO Callback nur bei Mausbewegung
Du hast aber schon geprüft, ob der Callback nicht aufgerufen wird oder die Message danach nicht verarbeitet wird, oder? (z.B. mit OutputDebugString)
Das geht aus deinem Post leider nicht hervor, da du nur den Effekt in der Anzeige beschreibst. |
AW: ASIO Callback nur bei Mausbewegung
Ja, hab ich. Das Callback wird nicht aufgerufen.
|
AW: ASIO Callback nur bei Mausbewegung
Extrem komisch... jetzt läuft es wie es soll .. obwohl ich nix geändert hab... :?
|
AW: ASIO Callback nur bei Mausbewegung
Ich weiß nicht, ob das was beiträgt. Aber ich hatte genau dieses Phänomen letztens bei einem Server, den ich mit TeamViewer steuern wollte: Screen wurde nur aktualisiert, wenn ich die Maus bewegt habe. Abhilfe war, die Hardwarebeschleunigung zu deaktivieren.
|
AW: ASIO Callback nur bei Mausbewegung
Zitat:
Ich hatte das bei einem MiniPC, wenn nichts am HDMI hängt. Hatte es nicht ausprobiert, aber dafür gibt es so FakeMonitore. ![]() |
AW: ASIO Callback nur bei Mausbewegung
Ich weiss nicht, fehlendes Update / Synchronisation eines Controls oder einer Anzeige kann ich mir vorstellen. Aber das der Treiber die Callbacks nur dann aufruft, wenn die Maus bewegt wird und dann die Samples/Zeit entsprechend erhöht finde ich extrem seltsam.
|
AW: ASIO Callback nur bei Mausbewegung
Zitat:
|
AW: ASIO Callback nur bei Mausbewegung
Na gut, der hat dann ja einen virtuellen Monitor, bzw. die virtuelle Grafikkarte reagiert nicht so, wie eine Echte.
-> Ohhh, es hängt kein Monitor dran, mich kann eh niemand sehen, na dann kann ich mich ja (teilweise) abschalten ... Bei mir war's eine integrated GPU eines extrem sparsamen NanoPCs. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 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