Linux (PThreads を使用) と Windows (組み込みの WinThreads を使用) の両方に C++ ライブラリを作成しています。これは、任意のプログラムにアタッチでき、スレッドの終了時に関数を呼び出す必要があります。プロセス。
私は pthreads の pthread_cleanup_push と pthread_cleanup_pop を知っていますが、これらは別の字句スコープを追加するマクロであるため、私には機能しませんが、ライブラリが初めて呼び出されたときにこの関数を宣言し、プログラム自体を実行できるようにしたいのですが独自のコードですが、必要があります。Windowsで同様のものはまったく見つかりませんでした。
これは、スレッドが停止したときに外部スレッドにアラートを出すことを意味するわけではないことに注意してください。また、プログラム自体によって制御されているため、スレッドが終了する方法を変更できるという意味でもありません。乗るために。
したがって、問題は次のとおりです。この場合、スレッドがどのように作成または破棄されるかを制御できない場合、Windows または Linux のいずれかで、スレッドが閉じたときに呼び出される関数を作成するための最良の方法は何ですか? ?
たとえば、メインプログラムでは次のようになります。
void* threadFunc(void* arg)
{
printf("Hello world!\n");
return NULL;
}
int main(int argc, char** argv)
{
int numThreads = 1;
pid_t* pids = NULL;
pids = (pid_t*) calloc(sizeof(pid_t), numThreads);
pthread_create(&ntid, NULL, threadFunc, &nVal);
pthreads[0] = ntid;
pthread_join(pthreads[0], NULL);
return 0;
}
ライブラリ内:
void callMeOnExit()
{
printf("Exiting Thread!\n");
}
スレッドが return NULL; に達したときに callMeOnExit が呼び出されるようにしたいと思います。この場合、メイン スレッドが return 0; に達したときと同様です。pthread_exit をラップすることは他のケースでも機能し、解決策になる可能性がありますが、可能であればより良い方法が必要です。
どうすればこれを行うことができるかについて誰かがアイデアを持っているなら、それは素晴らしいことです!