Mercurial > hg > Members > kono > Cerium
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); }