amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Screennotify & closewindow problem [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

02.09.2006, 02:13 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
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.

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 10:35 Uhr

jolo
Posts: 110
Nutzer
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ß

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 10:44 Uhr

thomas
Posts: 7716
Nutzer

Erstmal zwei Anmerkungen:

Zitat:
rufe ich CloseWindow() auf und hole dann vom Screen dann den Hintergrund

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:
wenn Ich screennotify benutze und dann die Message direkt nach einem CloseWindow() beantworte bekomme ich dennoch eine Message das nicht Alle Windows geschlossen sind

Da ist nicht zufällig noch ein LockPubScreen unterwegs ?


Zurück zu deinem Problem
Zitat:
dann bekomme Ich manchmal noch Gfx-Daten vom Fenster

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/

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 12:57 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von thomas:
Zitat:
wenn Ich screennotify benutze und dann die Message direkt nach einem CloseWindow() beantworte bekomme ich dennoch eine Message das nicht Alle Windows geschlossen sind

Zitat:
Da ist nicht zufällig noch ein LockPubScreen unterwegs ?


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.

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 14:41 Uhr

jolo
Posts: 110
Nutzer
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…

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 14:45 Uhr

malte2
Posts: 148
Nutzer
Sofern man es nicht anders angibt, sendet die lib die Messages asynchrone.

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 18:21 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
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.

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 18:29 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von malte2:
Sofern man es nicht anders angibt, sendet die lib die Messages asynchrone.


??? 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.

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 20:34 Uhr

thomas
Posts: 7716
Nutzer

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/

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 21:16 Uhr

malte2
Posts: 148
Nutzer
Stimmt! Habe notifyintuition.library mit screennotify.library vertauscht.

[ - Antworten - Zitieren - Direktlink - ]

03.09.2006, 20:05 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DariusBrewka:
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, ...

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.

[ - Antworten - Zitieren - Direktlink - ]

03.09.2006, 20:33 Uhr

Georg
Posts: 107
Nutzer
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.





[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Screennotify & closewindow problem [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.