amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Window-Liste aus Thread ermitteln [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2009-11-15, 12:29 h

Thore
Posts: 2266
User
Hallo

Ich habe das Problem zwar mal gelöst, aber mein Amiga will nicht booten... müsst das mal reparieren.
Daher mal zwischenzeitlich die Frage:
Wenn ich einen Thread hab, wie komme ich auf die Windows, Screens, Gadgets, die dieser Thread verwendet?

Ich hatte mal ein Tool geschrieben, welches beim Absturz eines Programms alle seine Elemente schließt, aber die Sourcen sind auf dem o.g. Amiga.... seufz.

Danke im Voraus
Thore

[ - Answer - Quote - Direct link - ]

2009-11-15, 14:03 h

thomas
Posts: 7718
User

Im Prinzip hast du keine Möglichkleit, von der Resource auf die Task, die sie angelegt hat, ruckzuschließen. Ein Resourcetracking dieser Art gibt es beim AmigaOS nicht.

Die einzige Möglichkeit, ist der Window->UserPort, dessen mp_SigTask in den meisten Fällen auf die Task zeigt, die das Fenster geöffnet hat. Sicher ist das aber auch nicht.

Um an den Window-Pointer zu kommen, mußt du beginnend von IntuitionBase->FirstScreen alle Screens und für jeden Screen beginnend bei Screen->FirstWindow alle Fenster durchgehen.

Wenn du einen Window-Pointer gefunden hast, kannst du über Window->FirstGadget auf die Gadgets schließen. Hier ist es allerdings sehr schwierig zu entscheiden, ob es ein einfaches struct Gadget ist, ein GaddTools-Gadget, ein BOOPSI-Gadget oder ein Element einer anderen GUI-Engine.

Es ist auf jeden Fall sehr gefährlich, solche Schlüsse zu ziehen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Answer - Quote - Direct link - ]

2009-11-15, 14:31 h

Thore
Posts: 2266
User
Hmm das Problem ist, daß eine externe Lib die GUI Elemente erstellt, und wenn ich das Hauptprogramm durch Ctrl-C abbreche soll er alles schließen. Da die Lib dynamisch ist (also nicht unbedingt Intuition Elemente erzeugen muss), sehe ich im Hauptprogramm nicht wo ich ansetzen muss.... der code ist sehr abstrakt und der Autor meldet sich nicht...

Wenn alles nichts hilft muss ich mir einen intelligenten Garbage Collector einfallen lassen...

[ - Answer - Quote - Direct link - ]

2009-11-15, 23:57 h

Holger
Posts: 8116
User
Zitat:
Original von Thore:
Hmm das Problem ist, daß eine externe Lib die GUI Elemente erstellt, und wenn ich das Hauptprogramm durch Ctrl-C abbreche soll er alles schließen.

Geht es um JAmiga?

Der zugehörige Java Code sollte einen ShutDown-Hook installieren. Das ist ein noch nicht gestarteter Thread, der gestartet wird, wenn die virtuelle Maschine beendet wird. Du müsstest nur dafür sorgen, dass die registrierten ShutDown-Hooks ausgeführt werden. So funktioniert es plattformunabhängig.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2009-11-16, 21:22 h

Thore
Posts: 2266
User
Ja es geht um JAmiga. Da ich in "Java Intern" nicht soo fit bin, bin ich für Hilfe dankbar =)
Vielleicht kannst du ein Beispiel posten?

[ - Answer - Quote - Direct link - ]

2009-11-16, 21:52 h

Holger
Posts: 8116
User
Zitat:
Original von Thore:
Ja es geht um JAmiga. Da ich in "Java Intern" nicht soo fit bin, bin ich für Hilfe dankbar =)
Vielleicht kannst du ein Beispiel posten?

Für die Implementierung oder für die Verwendung?

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2009-11-16, 22:05 h

Thore
Posts: 2266
User
Optimal wär beides *g*
Aber ich sollte erstmal wissen was dieser Thread denn konkret macht und wie er eingebunden wird, also ob er explizit im Java Code hinterlegt werden muss oder von der VM erzeugt wird.

[ - Answer - Quote - Direct link - ]

2009-11-17, 11:18 h

Holger
Posts: 8116
User
Zitat:
Original von Thore:
Optimal wär beides *g*
Aber ich sollte erstmal wissen was dieser Thread denn konkret macht und wie er eingebunden wird, also ob er explizit im Java Code hinterlegt werden muss oder von der VM erzeugt wird.

Ich hatte die Methode oben schon verlinkt, sie ist also Teil des public API, das heißt, jeder kann solche ShutDown-Hooks hinterlegen.

Wenn ich also in meiner Bibliothek (die kann natürlich auch Teil der JFC sein) eine Cleanup-Routine habe, erzeuge ich selbst den Thread und installiere ihn mit der o.g. Methode.

Die VM macht nichts weiter als diesen Thread zum richtigen Zeitpunkt zu starten. Steht auch in der Methodenbeschreibung.
Java code:
static java.io.FileWriter LOG_FILE;

static
{
  try
  {
    LOG_FILE = new java.io.FileWriter("application.log", true);
    LOG_FILE.write("Application Started Logging "+new java.util.Date()+"n");
  } catch(java.io.IOException e)
  {
    throw new ExceptionInInitializerError(e);
  }
  Runtime.getRuntime().addShutdownHook(new Thread("Finish Logging")
  {
    public void run()
    {
      finishLogging();
    }
  });
}

static void finishLogging()
{
  try
  {
    LOG_FILE.write("Application Exit "+new java.util.Date()+"n");
    LOG_FILE.close();
  } catch(java.io.IOException e) {}
}


--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Window-Liste aus Thread ermitteln [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.