aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw27@cam.ac.uk>2008-11-24 15:27:54 +0000
committerThomas White <taw27@cam.ac.uk>2008-11-24 15:27:54 +0000
commit54d3959c6d4f0af9a278c957e1459f0e125243c3 (patch)
tree692a95df10cfcdd7b583d0d9f7d30fe7065d649c
parent9ed5bec39c0fcbed0f6d970f938d10244e9ef67c (diff)
Make the accel thread belong to "main", join it on exit
-rw-r--r--src/accelerometers.c8
-rw-r--r--src/accelerometers.h4
-rw-r--r--src/main.c5
3 files changed, 9 insertions, 8 deletions
diff --git a/src/accelerometers.c b/src/accelerometers.c
index e1e3230..fbc749d 100644
--- a/src/accelerometers.c
+++ b/src/accelerometers.c
@@ -159,11 +159,7 @@ static void *accel_work(void *data) {
}
-void accelerometer_start() {
-
- GThread *work_thread;
-
- work_thread = g_thread_create(accel_work, NULL, TRUE, NULL);
-
+GThread *accelerometer_start() {
+ return g_thread_create(accel_work, NULL, TRUE, NULL);
}
diff --git a/src/accelerometers.h b/src/accelerometers.h
index 602dd1e..5f6daf2 100644
--- a/src/accelerometers.h
+++ b/src/accelerometers.h
@@ -29,11 +29,13 @@
#include <config.h>
#endif
+#include <glib.h>
+
#include "types.h"
extern AccelHandle *accelerometer_open(void);
extern void accelerometer_update(AccelHandle *accel);
-extern void accelerometer_start(void);
+extern GThread *accelerometer_start(void);
#endif /* ACCELEROMETERS_H */
diff --git a/src/main.c b/src/main.c
index 9426896..500a0db 100644
--- a/src/main.c
+++ b/src/main.c
@@ -40,6 +40,7 @@
int main(int argc, char *argv[]) {
MainWindow *mw;
+ GThread *accel_thread;
gtk_init(&argc, &argv);
g_thread_init(NULL);
@@ -51,7 +52,7 @@ int main(int argc, char *argv[]) {
atexit(SDL_Quit);
/* Start the accelerometer thread */
- accelerometer_start();
+ accel_thread = accelerometer_start();
/* Open the window */
mw = mainwindow_open();
@@ -61,6 +62,8 @@ int main(int argc, char *argv[]) {
gtk_main();
}
+ g_thread_join(accel_thread);
+
return 0;
}