diff options
author | Murray Cumming <murrayc@murrayc.com> | 2015-11-06 12:03:58 +0100 |
---|---|---|
committer | Murray Cumming <murrayc@murrayc.com> | 2015-11-26 10:24:43 +0100 |
commit | a3c735b797b1e0fe3956b2257ba3a1b3bd911a56 (patch) | |
tree | a4f7ec4e90c24a4eac53d6dc9ad32179b8937489 /examples | |
parent | fbf083af25666e35b5a734b3ed52dd0f6f9d9a7a (diff) | |
download | glibmm-a3c735b797b1e0fe3956b2257ba3a1b3bd911a56.tar.gz |
Network examples: Use std::thread instead of Glib::Threads::Thread.
Bug #757674
Diffstat (limited to 'examples')
-rw-r--r-- | examples/network/resolver.cc | 28 | ||||
-rw-r--r-- | examples/network/socket-client.cc | 15 | ||||
-rw-r--r-- | examples/network/socket-server.cc | 16 |
3 files changed, 52 insertions, 7 deletions
diff --git a/examples/network/resolver.cc b/examples/network/resolver.cc index a3c431af..483f65e2 100644 --- a/examples/network/resolver.cc +++ b/examples/network/resolver.cc @@ -23,6 +23,7 @@ # include <config.h> #endif #include <giomm.h> +#include <thread> #include <iostream> #include <cerrno> @@ -203,14 +204,22 @@ lookup_thread (const Glib::ustring& arg) lookup_one_sync (arg); } -static void +static std::vector<std::thread*> start_threaded_lookups (char **argv, int argc) { + std::vector<std::thread*> result; for (auto i = 0; i < argc; i++) { - Glib::Threads::Thread::create (sigc::bind (sigc::ptr_fun (lookup_thread), - argv[i])); - } + const Glib::ustring arg = argv[i]; + const auto thread = new std::thread( + [arg] + { + lookup_thread(arg); + }); + result.push_back(thread); + } + + return result; } static void @@ -497,18 +506,27 @@ main (int argc, char **argv) nlookups = argc - 1; loop = Glib::MainLoop::create (true); + std::vector<std::thread*> threads; if (use_connectable) do_connectable (argv[1], synchronous); else { if (synchronous) - start_threaded_lookups (argv + 1, argc - 1); + threads = start_threaded_lookups (argv + 1, argc - 1); else start_async_lookups (argv + 1, argc - 1); } loop->run (); + //Join and delete each thread: + std::for_each(threads.begin(), threads.end(), + [] (std::thread* thread) + { + thread->join(); + delete thread; + }); + #ifdef G_OS_UNIX watch_conn.disconnect (); #endif diff --git a/examples/network/socket-client.cc b/examples/network/socket-client.cc index 44fd94ce..9204a259 100644 --- a/examples/network/socket-client.cc +++ b/examples/network/socket-client.cc @@ -1,6 +1,7 @@ #include <cstring> #include <giomm.h> #include <glibmm.h> +#include <thread> #include <iostream> namespace @@ -159,10 +160,15 @@ main (int argc, return 1; } + std::thread* thread = nullptr; if (cancel_timeout) { cancellable = Gio::Cancellable::create (); - Glib::Threads::Thread::create (sigc::bind (sigc::ptr_fun (cancel_thread), cancellable)); + thread = new std::thread( + [cancellable] () + { + cancel_thread(cancellable); + }); } loop = Glib::MainLoop::create (); @@ -320,5 +326,12 @@ main (int argc, return 1; } + //TODO: This won't happen if we returned earlier. + if(thread) + { + thread->join(); + delete thread; + } + return 0; } diff --git a/examples/network/socket-server.cc b/examples/network/socket-server.cc index 897c5d14..dcca8c5b 100644 --- a/examples/network/socket-server.cc +++ b/examples/network/socket-server.cc @@ -1,3 +1,4 @@ +#include <thread> #include <iostream> #include <giomm.h> #include <glibmm.h> @@ -147,10 +148,15 @@ main (int argc, return 1; } + std::thread* thread = nullptr; if (cancel_timeout) { cancellable = Gio::Cancellable::create (); - Glib::Threads::Thread::create (sigc::bind (sigc::ptr_fun (cancel_thread), cancellable)); + thread = new std::thread( + [cancellable] () + { + cancel_thread(cancellable); + }); } loop = Glib::MainLoop::create (); @@ -321,5 +327,13 @@ main (int argc, return 1; } + + //TODO: This won't happen if we returned earlier. + if(thread) + { + thread->join(); + delete thread; + } + return 0; } |