diff TaskManager/Cell/SpeThreads.cc @ 76:5a1a5f4c28fd

*** empty log message ***
author gongo
date Mon, 18 Feb 2008 11:40:11 +0900
parents 1034077dd217
children 5c194c71eca8
line wrap: on
line diff
--- a/TaskManager/Cell/SpeThreads.cc	Mon Feb 18 04:47:28 2008 +0900
+++ b/TaskManager/Cell/SpeThreads.cc	Mon Feb 18 11:40:11 2008 +0900
@@ -1,7 +1,39 @@
+#include "types.h"
 #include "SpeThreads.h"
 
 SpeThreads::SpeThreads(int num) : spe_num(num) {}
 
+SpeThreads::~SpeThreads(void)
+{
+    unsigned int mail = MY_SPE_COMMAND_EXIT;
+    int ret;
+
+    for (int i = 0; i < spe_num; i++) {
+	send_mail(i, &mail);
+    }
+
+    printf("******  SpeThreads 1 ********\n"); 
+
+    for (int i = 0; i < spe_num; i++) {
+	pthread_join(threads[i], NULL);
+	ret = spe_context_destroy(spe_ctx[i]);
+	if (ret) {
+	    perror("[~SpeThreads] spe_context_destroy");
+	}
+    }
+
+    printf("******  SpeThreads 2 ********\n"); 
+
+    spe_image_close(spe_handle);
+
+    delete [] spe_ctx;
+    delete [] threads;
+    delete [] args;
+
+
+    printf("******  SpeThreads 3 ********\n"); 
+}
+
 void*
 SpeThreads::spe_thread_run(void *arg)
 {
@@ -21,6 +53,9 @@
 
     pthread_create(&thread, NULL, &spe_thread_run, (void*)arg_t->ctx);
 
+    // mail read の blocking ができれば
+    // ここで呼んだ方が早い。
+
     pthread_exit(NULL);
 }