C/C++でスレッドを終了する4つの解決方法


スレッドを終了するには4つの方法があります。
1.スレッド関数のreturnは戻ってきます。スレッド関数のreturnは返します。終了スレッドは最も安全です。スレッド関数returnが戻ったら、関数内で申請されたクラスのオブジェクトを整理します。すなわち、これらのオブジェクトの構文関数を呼び出します。その後、自動的に呼び出します。endthreadex()関数がクリーンアップします。Begintthreadex(...)関数によって申請されたリソース(主に作成されたtiddaaオブジェクト)
2.呼び出し_endthreadex()関数またはExitThread()関数:この2つの方法を使用してスレッドを終了すると、スレッド関数のreturn文は実行されませんので、スレッド関数がドメイン内で申請したクラスのオブジェクトの解析関数を呼び出すことができません。メモリが露出します。
残りの二つはプログラム設計では避けなければなりません。3.同じプロセスのもう一つのスレッドでTerminate Thread()関数を呼び出します。4.スレッドが存在するプロセスを終了する(絶対に避ける)。
でも、_と言いますendthreadexが全く役に立たないのは間違いです。endthreadexは時代遅れの関数ではありません。正しい使用は問題をもたらしません。例えばスレッドの主関数では、returnは_です。endthreadexの良い代替は、main関数の中のreturnがexit()またはExit Process()の良い代替であるように、exit関数が役に立たないことを意味しない。例えばスレッドがサブ関数を呼び出していますが、子関数がスレッドを終了すると決めたら、returnは無駄です。endthreadexはスレッドを終了します。しかし、この設計はよくないです。LZが提案する資源の流出を引き起こすかもしれません。特にバックグラウンドスレッドが終了した後のリソースのリークがメインスレッドのリソースよりも致命的であることを考慮して(メインスレッドが終了すると、プロセスは終了します。OSはすべてのリソースを消去します。リークしてもリークしなくても、サブスレッドが終了しても、メインスレッドが長く実行される可能性があります。多くの同じタイプのサブスレッドが終了する可能性があります。致命的なリークの原因になります。良いデザインですか?それともスレッドのメイン関数に戻りますか?endthreadexは必要ありません。マイクロソフトも、一部のプログラマーがexitシリーズの関数(Exit Thread、Exit Processなど)を呼び出すために仕方がないと指摘しています。