![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > Screennotify & closewindow problem | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2006-09-02, 02:13 h DariusBrewka Posts: 899 [Banned user] |
Ich habe irgendwie immer ein Problem mit CloseWindow(), das scheint irgendwie nicht fertig zu sein wenn CloseWindow() zurückkehrt. Z.B. rufe ich CloseWindow() auf und hole dann vom Screen dann den Hintergrund, dann bekomme Ich manchmal noch Gfx-Daten vom Fenster oder wenn Ich screennotify benutze und dann die Message direkt nach einem CloseWindow() beantworte bekomme ich dennoch eine Message das nicht Alle Windows geschlossen sind. Das scheint nur zu Funktionieren, wenn ich nach CloseWindow() ein Delay() mache, aber das kann nicht die Lösung sein und in den Autodocs dazu steht auch nichts dass CloseWindow() Asynchron ist. [ - Answer - Quote - Direct link - ] |
2006-09-02, 10:35 h jolo Posts: 110 User |
Es kann bis zu einem Intuition-TimerTick dauern, bis ein Fenster wirklich geschlossen wird. Um sicherzustellen, dass ein Fenster vom Bildschirm entfernt wurde, hilft eigentlich nur, die Fenster-Liste eines Bildschirms dahingegen zu untersuchen, ob dieses Fenster noch in der Fenster-Liste des Bildschirms vermerkt ist. Allerdings kann dass nur durch Polling erreicht werden - und das widerspricht dem Grundgedanken des MultiTasking. Zudem kann niemand garantieren, dass nicht gleichzeitig ein neues Fenster mit dem alten Fenster-Wert (struct Window *) erstellt wurde, obwohl dies eher theoretischer Natur sein dürfte, also in der Praxis kaum eintreten wird. Gruß [ - Answer - Quote - Direct link - ] |
2006-09-02, 10:44 h thomas Posts: 7721 User |
Erstmal zwei Anmerkungen: Zitat: Wie stellst du sicher, daß der Screen nach deinem CloseWindow nicht gesclossen wird ? Wenn du den Screen nicht sperrst, z.B. durch ein anderes Fenster oder durch LockPubScreen, dann kann dir ein anderes Programm den Screen genau da unterm Hintern wegreißen. Zitat: Da ist nicht zufällig noch ein LockPubScreen unterwegs ? Zurück zu deinem Problem Zitat: CloseWindow ist natürlich nicht asynchron, aber die Grafikupdates sind asynchron. Wenn dein Fenster ein Simple_Refresh-Window verdeckt hat (z.B. die Workbench-Fenster), dann werden diese von der Applikation neu gezeichnet, nicht von Intuition. Das läuft natürlich mehr oder weniger asynchron. Nur wenn du Intuition-Funktionen aufrufst, wartet Intuition, bis diese Operationen fertig sind. Die graphics.library weiß davon nichts und liest, was gerade da ist. Um das zu umgehen, kannst du dein Fenster mit WA_BackFill,LAYERS_NOBACKFILL öffnen. Dann wird der Hintergrund nicht gelöscht, und du kannst ihn aus deinem Fenster lesen anstatt aus dem Screen. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2006-09-02, 12:57 h DariusBrewka Posts: 899 [Banned user] |
Zitat: Natürlich nicht, denn dann würde ein Delay() auch nichts nutzen. Ich habe nach CloseWindow() auch die Windowslist durchgesucht und darin ist es auch nicht, aber wenn die CLOSEWB Message von screennotify kommt, und ich code:CloseWindow(); ReplyMsg(screennotifymsg); mache erscheint sofort wieder die Message dass der Screen nicht geschlossen werden kann, führe ich hingegen z.B. code:CloseWindow(); Delay(20); ReplyMsg(screennotifymsg); aus funktioniert alles korrekt. Ich kann mir nicht vorstellen daß das an e-uae liegt und eigentlich kann ich mir auch nicht so Richtig vorstellen, daß irgendwas anderes Kaputt ist, denn mit anderen Programmen, die Wohl kein Delay() haben, geht das ja. [ - Answer - Quote - Direct link - ] |
2006-09-02, 14:41 h jolo Posts: 110 User |
Wenn die Fenster-Liste des Bildschirms leer ist und ScreenNotify trotzdem meldet, dass sich ein geöffnetes Fenster auf dem Bildschirm befindet, kann es sein, dass ScreenNotify bzw. CloseWorkBench() zusätzlich irgendeine Prefs-Datei überwachen – und diese noch nicht aktualisiert wurde? Hab’ leider keine Ahnung von der ScreenNotify-Bibliothek – daher meine Frage… [ - Answer - Quote - Direct link - ] |
2006-09-02, 14:45 h malte2 Posts: 148 User |
Sofern man es nicht anders angibt, sendet die lib die Messages asynchrone. [ - Answer - Quote - Direct link - ] |
2006-09-02, 18:21 h DariusBrewka Posts: 899 [Banned user] |
Ich habe das vorhin mal unter WinUAE probiert und da ging das die Male die ich es getestet habe, aber AFAIR hatte ich das Problem früher auch unter WinUAE. [ - Answer - Quote - Direct link - ] |
2006-09-02, 18:29 h DariusBrewka Posts: 899 [Banned user] |
Zitat: ??? Ich sehe nirgendwo eine Möglichkeit etwas ausser dem Screen, der Priorität und dem Messageport anzugeben außerdem würde es meinem Verständniss nach wenig Sinn machen diese Msg Asyncron zu senden. Die lib muß wissen, dass die Applikation die Message erhalten hat und ggf. das Fenster schloss, die Bestätigung (für das Schliessen des Fensters) erfolgt über die Beantwortung dieser Message. [ - Answer - Quote - Direct link - ] |
2006-09-02, 20:34 h thomas Posts: 7721 User |
Hier ist ein Beispiel für ScreenNotify: http://thomas-rapp.homepage.t-online.de/examples/scrnfy.c Das funktioniert einwandfrei. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2006-09-02, 21:16 h malte2 Posts: 148 User |
Stimmt! Habe notifyintuition.library mit screennotify.library vertauscht. [ - Answer - Quote - Direct link - ] |
2006-09-03, 20:05 h Holger Posts: 8116 User |
Zitat:Wie thomas bereits sagte, bringt es nix, die Windowslist zu durchsuchen, weil nicht die Schließoperation des Fensters, sonders das Update der freigewordenen Fläche durch die anderen Programme asynchron ist. Nu hängt es natürlich davon ob, ob überhaupt Simple-Refresh Fenster unter dem Fenster lagen, weil die anderen automatisch neugezeichnet werden. Das Update von Simple-Refresh Fenstern kann beliebig lange dauern und zwischen BeginUpdate() und EndUpdate() sind die Layer gelockt, kann der screen also nicht geschlossen werden. Das ist aber Sache der scrennnotify.library, das zu berücksichtigen. Wobei allerdings das Ganze eh ein Hack ist, weil diese Funktion eigentlich von intuition zur Verfügung gestellt werden müsste... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2006-09-03, 20:33 h Georg Posts: 107 User |
Das CloseWindow() nicht synchron ist, ist sehr unwahrscheinlich. Das mit den Gfx-Daten liegt an simple refresh Fenstern, wie schon geschrieben wurde. Ne Refresh Operation an sich zwischen BeginUpdate ... EndUpdate (Holger) kann das Screen schließen nicht verhindern. Gelockte layer/layerinfo sorgen nicht an sich für Kann-Screen-Nicht-Schließen-Und-Deshalb-Abbruch-Von-CloseWorkbench. Sie zögern nur das layer(info) locken der CloseScreen Funktion hinaus, bis die locks eben frei sind. screennotify library source (+ toolmanager + ...) ist in stefanb_src.lha im Aminet zu finden. Vielleicht den mal anschauen. [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Screennotify & closewindow problem | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |