ユーザー スレッド ライブラリに関するいくつかの質問を見てきましたが、私の質問に答えるようなものはありませんでした。スレッドを作成し、実行し、キャンセルし、終了することができます。何らかの理由でできないのは、データを返すスレッドを取得することです。
スレッド ライブラリを初期化するときに、終了スレッド コンテキストを次のように設定します。
getcontext(&threadEnd);
threadEnd.uc_stack.ss_sp = (char *)malloc(SIGSTKSZ);
threadEnd.uc_stack.ss_size = SIGSTKSZ;
makecontext(&threadEnd, (void *) thread_exit, 1, &ReturnValue);
スレッドを作成し、次のように割り当てます。
thread->myContext.uc_stack.ss_sp = (char *) malloc(SIGSTKSZ);
thread->myContext.uc_stack.ss_size = SIGSTKSZ;
thread->myContext.uc_link = &threadEnd;
関数が戻り、thread_exit()が呼び出されると:
void thread_exit(void* retval){
int* test;
if (retval != NULL)
{
test = (int*) retval;
printf("Returned value: %i\n", *test);
fflush(stdout);
}
出力は常に「戻り値: 0」です。
呼び出された関数は、整数へのポインタを返しています。
私は何を間違っていますか?