1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
|
2005-11-08 Tim Mayberry <tmayberr@redhat.com>
* glibmmx: initial version.
2006-01-29 Klaus Triendl <klaus@triendl.eu>
* completed the reengineering of the tunnel handling and implementation.
tunnels are now sigc++2.0 functor adaptors which eases their usage and
integrates well in the sigc++'s way of doing things;
* Additionally, the api is easier to use, open_tunnel accepts every kind
of functor, the type of arguments is deduced when the functor is called,
i.e. tunnel functors are real sigc++ adaptors
* tunnels can be synchronous or asynchronous.
* renamed TunnelFunctor to TunnelContext
* renamed TunnelFunctor(0..7) to tunnel_context (which is a template
specialization for different kind of tunnels
* added tunnel_functor (note: this is not the former TunnelFunctor(0..7)
but is a sigc++ adaptor
* changes to open_tunnel:
- returns a tunnel_functor instead of a sigc::slot
- parameter reordering
- accepts every kind of functor
- an asynchronous/synhronous tunnel can be created by specifying the
template argument GlibX::SYNC or GlibX::ASYNC;
asynchronous tunnels are created by default
* removed call_it
* removed template function tunnel(), tunnels can only be opened by
open_tunnel()
* moved the Glib::Cond member from GlibX::Dispatcher to
GlibX::StandardDispatcher because it was only used there
2006-05-28 Klaus Triendl <klaus@triendl.eu>
* added threadsafe signaling on top of sigc++
1) Signal: a wrapper to a sigc::signal
2) SignalReference: a threadsafe reference to a Signal
3) ConnectionReference: a threadsafe reference to a sigc::connection
* has now an interesting example: ipresolver
* added option 'SHAREDLIB' to SConstruct to allow switching between shared
and static library builds
* needs a boost::shared_ptr, added dependency to boost/shared_ptr.hpp
2006-06-04 Klaus Triendl <klaus@triendl.eu>
* improved the documentation by grouping the classes and adding
documentation; still some work needs to be done, though
2006-06-05 Klaus Triendl <klaus@triendl.eu>
* bugfix: synchronous TunnelContexts did not lock in the correct order
(tunnel() locked the mutex for the condition after and invoke())
* bugfix: Dispatcher ctor did not initialize m_queued_contexts;
initializes now all members explicitly
2006-06-06 Klaus Triendl <klaus@triendl.eu>
* improved example "ipresolver", now tells the user if the resolver thread
is blocking and can't be finished because it still tries to resolve
something
2006-06-11 Klaus Triendl <klaus@triendl.eu>
* removed parameter bSync from threadable::finish()
* threadable::finish() is now threadsafe, the first thread aquiring the
mutex joins the thread
* made lockable non-copyable
2006-07-02 Klaus Triendl <klaus@triendl.eu>
* added template struct `auto_tunneler" and template struct
`is_functor_tunneled" to facilitate auto tunneling of functors at compile
time
* redesigned threadable; follow Tim's suggestion and provide virtual methods
on_startup() and on_cleanup() instead of letting derived classes override
on_run() and on_finish()
* complete rework of the documentation for threadable
* cleaned up the ipresolver example and added it to the reference
documentation
* follow Tim's advice to use glib atomic operations for counting the
tunnel contexts (messages) in the dispatcher queue in favor of using
sig_atomic_t that is not garanteed to be threadsafe on all platforms;
thus removing dependency to <signal.h>
2006-07-16 Klaus Triendl <klaus@triendl.eu>
* added template functor `request" to facilitate message dispatching when
"requesting" a threadable to do something.
2006-07-22 Klaus Triendl <klaus@triendl.eu>
* added class noncopyable (namespace internal) to facilitate the
non-copyable idiom
* remove threadable::on_finish() as handler for the `finish" message;
finish() now uses a composite functor calling quit() on the mainloop
2006-07-23 Klaus Triendl <klaus@triendl.eu>
* improved macros:
- using defines _R_, _P_ and _T_ (sigc::type_trait<>::take,
sigc::type_trait<>::pass, sigc::type_trait<>::type)
- simplified and generalized creation of tunnel contexts
* improved documentation for tunnel contexts
* bugfix (compile time): synchronous tunnel contexts did not define correct
std::auto_ptr template for self-deletion thus resulting in a compiler
error when constructing the std::auto_ptr with `this"
* asynchronous tunnel contexts now also use a std::auto_ptr for
self-deletion; this ensures proper deletion of the tunnel context even
when exceptions are thrown.
2006-08-18 Klaus Triendl <klaus@triendl.eu>
* renamed referenced_dispatchable to shared_dispatchable
* renamed open_tunnel_sync() to open_sync_tunnel()
* removed dependency to boost::shared_ptr; I've implemented my own sharing
mechanism for the dispatchable's dispatcher pointer
2006-08-26 Klaus Triendl <klaus@triendl.eu>
* added request_f (request functor) to facilitate sending messages to a
thread
* reengineered completely the signal handling and implementation:
+ removed SignalBase, Signal, SignalBaseReference, SignalReference
+ added signal_f_base, signal_f, signal_base, signal, signal_source_base,
signal_source_threadprivate, signal_source_obj_mem, signal_source_slot,
ConnectionHandler, TypedConnectionHandler
+ 1) signal_f acts as a mediator between two threads such that the client
thread gets a threadsafe copy of a server thread's signal
2) a signal_source_base abstracts completely the origin of a server
thread's signal, thus enabling the programmer to specify different
sources for a signal.
+ GlibX::Signal specialization for Glib::SignalIdle;
SignalTimeout, SignalIO and SignalProxy will follow soon;
allow a programmer to connect a client thread with these signals of a
server thread
* improved locking facilities:
+ renamed lockable to lockable_base, lockable_type to lockable
+ made a lockable's encapsulated type volatile
+ a lockable is now template specialized for a "lock", e.g. a mutex or a
read/write lock;
this approach generalizes programming with locks and locked types;
there are predefined lockables specialized for a specific lock:
static_mutex_lockable, mutex_lockable, static_rw_lockable, rw_lockable,
static_recmutex_lockable, recmutex_lockable
+ added classes Locker and ConstLocker to lock a lockable, nonvolatile
access to the locked type with unlock()
* tunnel_context now throws exception `bad_dispatcher" in case that the
pointer to the dispatcher is invalid (message cannot get dispatched to
the server thread)
* added concept classes:
noncopyable, nonheapcreatable, noninstantiatible, operator_new
2006-08-26 Klaus Triendl <klaus@triendl.eu>
* renamed managed_dispatchable to threadmanaged_dispatchable, much clearer
* splitted auto_dispatchable: auto_dispatchable is now a baseclass with
protected access, added glib_auto_dispatchable that does the right job:
creating a GlibDispatcher
* Dispatcher must be created and destroyed by the thread in who's context
the dispatcher is acting
* Dispatcher now inherits from operator_new to ensure heap allocation
happens in the glibmmx module (needed for windows)
2006-09-02 Klaus Triendl <klaus@triendl.eu>
* added deadlock detection: throw an exception if a thread sends a
synchronous message to itself or to a thread that in turn has a
synchronous message pending to the sending thread
2006-09-03 Klaus Triendl <klaus@triendl.eu>
* added GlibX::Signal specialization for SignalTimeout, SignalIO and
SignalChildWatch
2006-09-03 Klaus Triendl <klaus@triendl.eu>
* little bit of documentation
2006-09-12 Klaus Triendl <klaus@triendl.eu>
* GlibX::Signal now can be template specialized for a group of signal types:
Glib::SignalNormalProxy and sigc::signal_base derived signals and
irrelevant grouping;
This allows you to connect to Glib::SignalProxyN signals, e.g. to a
Gtk::Button::signal_clicked() if that signal is exposed by a signal
functor (signal_f)
2006-09-14 Klaus Triendl <klaus@triendl.eu>
* small bugfixes for some signal_f ctors
* object instances for signal sources can now be late bound; This is
achieved by pointer references to objects ( T_obj*& )
2006-09-21 Klaus Triendl <klaus@triendl.eu>
* added internal::shared_ptr<T> (unwillingly but necessarily)
* Signal<T>::connect* methods are now asynchronous; this is achieved by
sharing a pointer to a connection (internal::shared_ptr<sigc::connection*>)
that is transferred to the server thread.
The actual sigc::connection to which the shared connection pointer points
to is then created later by the server thread.
I call this "late binding" of an instance to a shared pointer
This means effectively that connecting to a signal is now asynchronous.
2006-09-25 Klaus Triendl <klaus@triendl.eu>
* signal_f<T>::operator () is now asynchronous; this is achieved by
sharing a pointer to a signal source (internal::shared_ptr<signal_source_base*>)
that is transferred to the server thread.
The actual signal source to which the shared signal source pointer points
to is also transferred to the server thread where it is then bound to
the server thread's lifetime
I call this "late binding" of an instance to a shared pointer.
This means effectively that getting a threadsafe representation of a
signal is now asynchronous.
2006-10-18 Klaus Triendl <klaus@triendl.eu>
* remove constraint_toplevel_functor() (replaced by SIGX_STATIC_ASSERT)
* add is_or_adapts_slot to find out at compile time whether a functor is
a slot itself or contains a functor adapting a slot
* add SIGX_STATIC_ASSERT to issue clearer compile time error messages
at function scope
* Signal<T>::connect and Signal<T>::connect_notify now ensure with
SIGX_STATIC_ASSERT that no slots are connected
2006-10-21 Klaus Triendl <klaus@triendl.eu>
* Thanks to Tim's idea (PDB::Dispatcher::run()), glib_threadable::run()
now blocks until the thread is in a running state
2006-10-21 Klaus Triendl <klaus@triendl.eu>
* If a thread sends a synchronous message to itself then this case is
detected as a deadlock detection, too
* request functors now don't accept slots, adapted slots and tunnel
functors that are not toplevel
2007-01-06 Klaus Triendl <klaus@triendl.eu>
* renamed namespace GlibX to sigx
* added export/import declaration to classes exported from the DLL on windows
* created a solution for MSVC++ 2005:
- the library builds now successfully on windows
- ipresolver example runs on windows
- tests compile and run on windows
- macro files compile to hpp files
* added sigxconfig.hpp
* scons doesn't doesn't substitute anymore macros in *.hpp.in files, rather m4
creates the hpp-files directly (added a macro definition for the copyright)
* put tunnel_functor's members into tunnel_base
* added sigxconfig.hpp (has still to be done for linux) to get machine and sigc++ configuration
* added validity tracking for tunnel functors (message is not dispatched anymore if dispatchable of callback goes out of scope; also, all connected tunnel functors are d
* renamed sigx::signal to sigx::signal_wrapper
* now, sigx::connectionS share a pointer to a sigc::connection (the sigc::connection lives in the context of the server thread)
* now, sigx::signal_wrapperS share the signal source (that accesses a signal living in the context of the server thread)
2007-01-06 Klaus Triendl <klaus@triendl.eu>
* added visual c++ project test_static_assert
* tunnel callbacks are now invalidated when dispatcher goes out of scope, not when the dispatchable dies
* signal_f takes a sigc::(const_)reference_wrapper for late binding objects to pointer variables
2007-01-08 Klaus Triendl <klaus@triendl.eu>
* SConstruct tests for available std::tr1::shared_ptr or boost::shared_ptr;
they take precedence over the sigx::internal::shared_ptr because they
are perfectly configured for many environments
2007-07-22 Klaus Triendl <klaus@triendl.eu>
* renamed directories and scons variables from "glibmmx" to "sigx"
* added threadable
2008-03/2008-04 Klaus Triendl <klaus@triendl.eu>
* changed validity tracking in tunnel functors:
- must not activated anymore by default: tunnel_functorS are not subject to validity tracking otherwise explicitly requested
(yielded problems with request_f and "on-the-fly" tunnels)
- sigx::signal_wrapper::connect() activates it explicitly on tunnel_functorS
* added solution for MSVC++ 2008 (note however that heap debug assertions happen at the end of the program when executing example and test programs)
* renamed *.hpp to *.h
* added sigx::ref, like sigc::ref but overloaded for reference wrappers
* added make_new_tunnel_context, enables us to let the compiler deduce the correct functor for a full tunnel_context specialization
* refactored tunnel_context:
- specialize template on functor type instead of argument types, eases the creation of tunnel_contextS, less specializations
- no need for tunnel_context.h.m4
* refactored tunnel_functor:
- use sigc::bind together with sigx::ref for easy creation of tunnel_contextS
* removed shared_ptr.h, shared_ptr functionality is too complex and tr1 is almost at hand or easily available in boost
* require availability of <tr1/memory> (shared_ptr)
* require availability of boost (needed for mpl)
* made scons target "tests"
* made scons target "examples"
2008-03/2008-04-12 Klaus Triendl <klaus@triendl.eu>
* renamed sigx::connection to sigx::connection_wrapper to be in sync with signal_wrapper
* added test program test_sync_async_argument_passing
* derive sigx::request_f protected from sigc::slot and make sigc::slot::operator() explicitly public with a using directive
2008-03/2008-04-13 Klaus Triendl <klaus@triendl.eu>
* renamed sigx::threadmanaged_dispatchable to sigx::manual_dispatchable
2008-05-05 Klaus Triendl <klaus@triendl.eu>
* sigx::connection_wrapper doesn't cache the connection status anymore
* ... which means one variable less, leading to a bugfix: connection_wrapper could have leaked (under very low memory conditions, though)
* for the glib debug message facilities include <glib.h> instead of <glib/gmessages.h>;
that's not the nicest way but the official one and fixes a compilation error because gassert() was moved from gmessages.h to gtestutils.h in glib-2.16
2008-05-07 Klaus Triendl <klaus@triendl.eu>
* bugfix for sigx::connection_wrapper::operator =: prevent self-assignment
* renamed cpp macro DISPATCH_WITH_FUNCTOR to SIGX_DISPATCH_WITH_FUNCTOR
* removed unused sigx::conditional_functor, a functor adaptor executing the adapted functor only if a condition evaluates to true
* consolidated open_tunnel() functions
* connection_handler now stores plain pointer to a sigc::connection instead of a shared_ptr in the threadspecific connections
* modifications to the construction script:
- pull in the whole environment as construction variables
- ... and replace them with any explicitly provided commandline options
- write the c++ compiler in use
2008-05-11 Klaus Triendl <klaus@triendl.eu>
* signal_wrapper<>::connect() now calls new protected template method signal_wrapper_base::connect() that contains the
common code for all signal types
* bugfix for tunnel_validity_tracker::on_last_functor(): reference count for the validity_trackable was not decreased and
prevented the validity_trackable to be destroyed (memory leaks!)
* added validity tracking to connection_wrapper such that it can be used even after restarting a threadable
* when checking in the initial repository msvc test projects were missing in the source tree (though the projects were in the solution)
* new test program test_connection_handling to test connections after restarting a thread
* bugfix: dispatchable's ctor could have leaked allocated resources
2008-05-11 Klaus Triendl <klaus@triendl.eu>
* moved msvc project for sigx++2 into its own subdirectory
* all intermediate build output goes into a projects $(ConfigurationName) subdirectory
* all final build output (exe, dll, pdb) goes into $(SolutionDir)$(ConfigurationName) subdirectory
* added nothrow hint to connection_wrapper's, signal_wrapper_base's, signal_wrapper's, dispatchable's and shared_dispatchable's ctors
2008-12-21 Klaus Triendl <klaus@triendl.eu>
* tested sigx with libraries and modules from the newest gtkmm (2.14) installer for windows;
they added modules linked against the vc9 runtime and the heap problem with gtkmm applications is gone
* use new MSVC property sheets from the newest gtkmm installer
* added copyright to .h and .cpp files where it was missing (thx to Chow Loong Jin <hyperair@gmail.com>)
* updated address of the Free Software Foundation in the copyright (thx to Chow Loong Jin <hyperair@gmail.com>)
* added DESTDIR to SConstruct, useful for making binary packages (thx to Chow Loong Jin <hyperair@gmail.com>)
* env.CXXFLAGS got quoted when appending flags (SConstruct), now convert to an array first (thx to Chow Loong Jin <hyperair@gmail.com>)
2008-12-23 Klaus Triendl <klaus@triendl.eu>
* added precompiled header facilities (__sigx_pchfence__.h, __sigx_pch__.cpp) - pch has a huge impact on compilation time
* MSVC projects use precompiled headers for sigx to speed up the compilation process
* changed MSVC projects to match the output file naming convention of the gtkmm installer ->
sigx-vc{80|90}[-d]-2_0.{dll|lib}
2008-12-24 Klaus Triendl <klaus@triendl.eu>
* modified and added debian/SConscript (thx to Jacek Wolszczak [shutdownrunner@o2.pl])
* removed old MSVC property sheets
2008-12-29 Klaus Triendl <klaus@triendl.eu>
* prevent removal of header files generated by the m4 builder and sigx-2.0.pc, sigxconfig.h and docs/Doxyfile generated by the SubstInFile builder by using the scons' NoClean function
2008-12-31 Klaus Triendl <klaus@triendl.eu>
* added a VersionedSharedLibrary method from Richard Levitte appending the version to the shared library and setting the correct SONAME on various systems
* Depend on scons >=0.98 (NoClean is available in 0.97, AddMethod in 0.98)
2008-01-04 Klaus Triendl <klaus@triendl.eu>
* add (this == &other) check to dispatchable::operator =()
2008-01-07 Klaus Triendl <klaus@triendl.eu>
* increased release version: 2.0.1
* class operator_new got operator new[]() and operator delete[]()
2008-01-08 Klaus Triendl <klaus@triendl.eu>
* create and install versioned shared library on posix systems with the soname correctly set
(replaced Levitte's VersionedSharedLibrary builder with a combination of the tools 'versionedlibrary' and 'symlink' from the eugene project and my own)
2008-01-18 Klaus Triendl <klaus@triendl.eu>
* updated sigx.pc.in, contained old library name 'glibmmx' and the old project link
* add distclean target, removes sigx-2.0.pc, sigxconfig.h, docs/Doxyfile
2009-02-14 Klaus Triendl <klaus@triendl.eu>
* fixed compiler errors when calling g_atomic_pointer_set() on target architectures (e.g. powerpc) not supporting atomic read/write of integer variables:
g_atomic_pointer_set is a macro expanding on those architectures to a function where arguments get checked then by the compiler, on other target machines it just expands to a simple assignment
|