[834] in The GTK GIMP ToolKit mailing list archive
[gtk-list] Signal Slot implementation, C++
daemon@ATHENA.MIT.EDU (Erik Thiele)
Mon Aug 25 15:53:19 1997
Date: Mon, 25 Aug 1997 21:51:14 +0200 (CEST)
From: Erik Thiele <erik@unterland.de>
To: lip-ct@blank.pages.de, gtk-list@redhat.com
Resent-From: gtk-list@redhat.com
Reply-To: gtk-list@redhat.com
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
--8323328-1133971694-872538674=:980
Content-Type: TEXT/PLAIN; charset=US-ASCII
hi. this mail is sent both to the developers of the Linux Interface
Project and the developers of the GTK. it is related to GTK--, not to GTK,
however.
i have developed a Signal Slot implementation. I'd like it to be included
into LIP and GTK-- ;) feel free to mail me.
this is the README file. it is also included in the distribution that is
attached to this mail. no need to save this mail. the distribution is
enough.
--------------------- snip
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! THIS IS ALL MY CODE, ALL RIGHTS RESERVED !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(i am lazy now, GPL later!)
This is a Signal Slot implementation for C++
--------------------------------------------
VERSION 0.0.0 Mon Aug 25 21:21:01 CEST 1997
---------------------------------------------
Features:
---------
- no Precompiler needed
- debugging through signal calls possible
- defered and shot connects possible
- variable number of parameters
- type safety at COMPILETIME
- impossible connections are detected at COMPILETIME
- classes that use signals and slot do NOT need to be derived
from some kind of super super class
- can be included in ANY existing application without major
changes
- can COEXIST together with other signal slot implementations at
the same time in the same program !
- if you use deferes connects, you have to add a call to
mainQueue::run(); in your main event loop. All defered
Signals will be delivered then.
- minimum amount of copies of objects while being transfered
through the Signal Slot system.
if you do a SHOT connect, no copy.
if you do a DEFERED connect, one copy.
- only one slot is attached to a signal
only one signal is attached to a slot
(it is possible to extend the code, so that multiple connections
per signal and slot are supported,
but this is not the thing of most importance right now, I think)
- !!!!!!!!!!!!!! if a class that has the Slot is deleted, an
eventually existing connection with a Signal is cut !!!!
eventually defered waiting Signal deliveries are canceled !!!
this feature is missing in some other implementations, but I
think it's damn important !
why did I write this peace of code ?
------------------------------------
i am developing a textmode based GUI on DOS (uuargh...) therefore
i needed a signal slot implementation. so i wrote one. here
it is.
REMEMBER: this can be used for EVERYTHING, not just GUIs.
why do i support those defered connects ?
-----------------------------------------
if a widget emits a signal The_User_Pressed_The_Quit_Button() or
Game_Over() or I_am_of_no_use_anymore() then the receiver of
the signal might want to delete the widget. if you do this
with a normal signal slot system, the widget will be deleted
NOW (in the slot routine). when the slot routine is done, the
CPU will continue work right after the emission call of the signal
in the widget class, but the widget class doesn't exist anymore
this can lead into core dumps and you have to write terrible
workarounds (let someone else delete it later, or make the
widget modal, or just don't delete it)
with defered connects, the widget emits Game_Over() and the
call returns imediately. the signal is queued. now the program
will continue, until it is in the main event loop again.
there, mainQueue::run(); will be called, and NOW the signal will
be delivered. the widget is not on the calling stack now, and so
it is save for the receiver to do "delete the_widget;";
understand ?
eeeh. hmm. what shall i do now ?
--------------------------------
make
./evtest
this is what you do. afterwards, take a look at evtest.cpp
i hope it explains things.
General thoughts and who I am... (please read)
----------------------------------------------
My name is Erik Thiele. I have built a robot car on rtlinux
(linux with realtime extensions). it is able to navigate in a
room, and it drives around autonomously. See my homepage.
MANY pictures ;) I used a libQT program to control the car.
while doing so I found tons of bugs in libQT. the authors
said: "Yes this is a bug. it is fixed now. here is the patch.
You mustn't use the patch, the license forbids this"
this is the first thing i dislike about QT.
second is the license.
third is some design errors regarding processEvents();
and the lack of defered signals.
fourth: they do not release bugfixes.
fifth: after finally accepting that one of my bugs is a
horror bug that just renders the lib useless, they released
a bugfix version. but this version only fixes this horror bug,
all the other bugs aren't fixed.
sixth: the next version of the library will include not only
the bugfixes, but also new features, this means new bugs.
seventh: this way there will never be a stable QT, because
of the version release policy.
by the way: libQT is http://www.troll.no/
I am also interested in model submarines. see my homepage ;)
I think, a GUI is a fundamental thing. it must be bugfree.
it must be FREE. source must be available, it must be LGPL.
it must be good :)
i'd like GTK--
and LIP
to include my sigslot system :)
feel free to mail me.
--
EMAIL: erik@unterland.de \\\\
IRC: erikyyy o `QQ'_
HP: http://escape.unterland.de/~erik/ / __8
' `
--------------------------- snip
--
EMAIL: erik@unterland.de \\\\
IRC: erikyyy o `QQ'_
HP: http://escape.unterland.de/~erik/ / __8
' `
--8323328-1133971694-872538674=:980
Content-Type: APPLICATION/x-gtar; name="sigslot_0_0_0.tgz"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.970825215114.980B@master>
Content-Description: thisis it
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
AA==
--8323328-1133971694-872538674=:980--
--
To unsubscribe: mail -s unsubscribe gtk-list-request@redhat.com < /dev/null