メイン スレッドから呼び出される別のスレッドとして実行される Teamcenter ITK プログラムを作成しようとしています。メイン スレッドは、UI 上のアクションから呼び出されます。子スレッドは完了するまでに長い時間がかかるため、子スレッドを作成せずにコードをメイン スレッドに配置すると、UI が最大 10 分間フリーズします。これは許容できません。
SSO を使用しているため、メイン スレッドと子スレッドの両方で、メイン スレッドによって行われた認証を共有する必要があります。また、データベースに接続する必要があります。最後に、メイン スレッドは子スレッドが完了するのを待つべきではありません。
子スレッドを呼び出すコードは次のとおりです。
handle = (HANDLE) _beginthread (submitToPublishTibcoWf, 0, &input); // create thread
do
{
sprintf(message, "Waiting %d time for 1000 milliseconds since threadReady is %d\n", i++, threadReady);
log_msg(message);
WaitForSingleObject(handle, 1000);
}
while (!threadReady);
sprintf(message, "Wait for thread to be ready over after %d tries since threadReady is %d\n", i, threadReady);
log_msg(message);
log_msg("Main thread about to exit now");
threadReady = 1
実行に 8 分かかるコードを子スレッドで実行しようとするときはいつでも、グローバル変数を設定します。
問題は、メイン スレッドが終了した後に子スレッドが奇妙な動作をすることであり、次のエラーが発生します。
Fri May 25 11:34:46 2012 : Main thread about to exit now
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ほとんどの子スレッドは実行されますが、最後にクラッシュすることがあります。