[gitg/commit] Added async thread convenience class



commit 46996e2f15ec1076d1ce03e03806356d1a6d0739
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Sat Jun 29 19:28:25 2013 +0200

    Added async thread convenience class

 libgitg/Makefile.am     |    1 +
 libgitg/gitg-async.vala |   50 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 0 deletions(-)
---
diff --git a/libgitg/Makefile.am b/libgitg/Makefile.am
index eb179ed..0bfb6e5 100644
--- a/libgitg/Makefile.am
+++ b/libgitg/Makefile.am
@@ -40,6 +40,7 @@ libgitg.h: libgitg-1.0.la
 
 VALA_FILES =                                   \
        gitg-assembly-info.vala                 \
+       gitg-async.vala                         \
        gitg-branch.vala                        \
        gitg-branch-base.vala                   \
        gitg-repository.vala                    \
diff --git a/libgitg/gitg-async.vala b/libgitg/gitg-async.vala
new file mode 100644
index 0000000..3e0c178
--- /dev/null
+++ b/libgitg/gitg-async.vala
@@ -0,0 +1,50 @@
+/*
+ * This file is part of gitg
+ *
+ * Copyright (C) 2013 - Jesse van den Kieboom
+ *
+ * gitg is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * gitg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gitg. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace Gitg
+{
+
+internal class Async
+{
+       public delegate void ThreadFunc();
+
+       public static async void thread(ThreadFunc func)
+       {
+               SourceFunc callback = thread.callback;
+
+               try
+               {
+                       var t = new Thread<void *>.try("gitg-status-enumerator", () => {
+                               func();
+                               Idle.add((owned)callback);
+
+                               return null;
+                       });
+
+                       yield;
+
+                       t.join();
+               }
+               catch {}
+       }
+}
+
+}
+
+// ex:set ts=4 noet


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