Re: Still confused on new thread starting idle functions to update UI.



On Thu, Dec 5, 2013 at 4:16 AM, Chris Vine <chris cvine freeserve co uk> wrote:
On Thu, 5 Dec 2013 03:06:59 +1100
Chris Angelico <rosuav gmail com> wrote:
See how much effort goes into
making sure everything's thread-safe? [None], because this
isn't even threaded - though it will happily handle any number of
simultaneous clients.

And to make the point for David, you can do the same in the C
GTK+/glib libraries, by abandoning threads and instead setting up an
asynchronous watch on the socket using a GIOChannel with
g_io_channel_add_watch().

However, even better than that is to use gio's high level
GSocketListener and GSocketConnection, and read on the contained
GInputStream asynchronously using g_input_stream_read_async().

I'm not aware of the details of that, as I've never used GTK in C, but
it doesn't surprise me that there are convenient ways to do this.
Socket handling is just such a common thing to do! Though there might
not be quite such easy solutions for other tasks, I'm sure there'll be
some way of doing it - after all, not every platform even supports
threads.

I could do the Pike example as threaded, though; it'd still be way
cleaner than the C version, because I can simply pass a string around
- notice how my read_callback is simply given a string as an argument,
same as you might be given an integer in C. In most modern high level
languages (including both Python and Pike, and plenty of others),
strings, arrays, mappings, and so on are all first-class objects. No
fiddling with memory (de)allocation. Ever so much easier. Under the
covers, they're usually all stored on the heap, and probably
refcounted.

ChrisA


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]