xlib r

02/07/2009 - 01:57 von Jan Bruns | Report spam
Hallo.

Folgendes kleine Problemchen:

U.a. um einzelnen Fenstern einer Anwendung Timerfunktionen zur
Verfügung zu stellen, hàtte ich eigentlich ganz gerne die in
der Doku zu xlib angepriesenen filehandles zu xlib connections,
die ich dann mit select(...,frühester_timer) überwachen wollen
würde.

Leider rückt xlib die Dinger auf meinem Rechner nicht raus
(XAddConnectionWatch ist erfolgreich, ruft aber das Callback
nie auf, und XInternalConnectionNumbers liefert erfolgreich eine
leere Liste). Ist das normal?

Bevor ich mir da grossartig selbst einen workaround zu ausdenke,
dachte ich, ich frage lieber mal nach einem.


Also vor hatte ich wie gesagt etwa sowas:

procedure messageloop;
begin
while not(shutdown) do begin
generate_onTimer_calls;
if Xpending()>0 then workmessage
else select(...,earliest_next_timer);
end;
end;

Das funktioniert zwar auch ohne die handles, wenn ich die
Zeit im select() auf irgendwas sinniges begrenze, aber so
richtig zufriedenstellend finde ich das irgendwie nicht
(einerseits geringfügige, u.U. vernachlàssigbare
CPU-Verschwendung im völligen Leerlauf, andererseits
erhöhte Reaktionszeiten bei Events).

Gruss

Jan Bruns
 

Lesen sie die antworten

#1 Jan Bruns
03/07/2009 - 06:25 | Warnen spam
Jan Bruns:

Leider rückt xlib die Dinger auf meinem Rechner nicht raus
(XAddConnectionWatch ist erfolgreich, ruft aber das Callback nie auf,
und XInternalConnectionNumbers liefert erfolgreich eine leere Liste).
Ist das normal?



Die Frage, inwieweit das normal ist, steht noch aus.

Bevor ich mir da grossartig selbst einen workaround zu ausdenke, dachte
ich, ich frage lieber mal nach einem.



Mein workaround sieht jetzt so aus, daß ich einen zusàtzlichen
Timerthread verwende, der als fensterloser client bei X
angemeldet ist, und eigentlich immer schlàft, nur hin und wieder
ein zu diesem Zweck entworfenes TimerEvent zu einem Fenster des
Hauptthreads schickt, bzw. auf Neueinstellungen des Timers durch
den Hauptthread wartet.

Der Hauptthread verwaltet alle Timer zusammen mit den Fenstern,
so daß der Timerthread sich effektiv nur darum kümmert, den
Hauptthread aus dem "Warten auf Events" innerhalb Xlib rauszuholen.

Gruss

Jan Bruns

Ähnliche fragen