4

ここにも記載されている問題があります: http://www.delphigroups.info/3/9/106748.html

「return 0」、「ExitProcess(0)」、「ExitThread(0)」、exit(0) ではなく、コード内のあらゆる場所に Application->Terminate() func を配置するほぼすべての形式を試しました。機能するバリアントはアプリを閉じません。代わりに、Application->Terminate() ステートメントの後のコードが実行されています。

アプリに 2 つ以上のスレッドがあります。実行後に作成されたスレッドとメインスレッドでterminate funcを呼び出してみました。

また、これは(私が想像できる限り)CodeGuard / madExceptとは関係ありません(オフにしてからオンにしましたが、効果はありません)。CodeGuard の回転も成功しませんでした。

唯一の機能するコード バリアントは、Application->Terminate() 呼び出しを任意のフォーム ボタンの OnClick ハンドラに配置することです。しかし、これは私のニーズには合いません。どこでも終了する必要があります。

C++ Builder 2010 アプリケーションのすべてのスレッドを終了し、プロセスを終了するにはどうすればよいですか?

4

1 に答える 1

3

Application->Terminate()はアプリケーションをすぐに閉じません。アプリケーションを閉じたいというシグナルを送るだけです。

Terminate は、Windows API の PostQuitMessage 関数を呼び出して、アプリケーションの正常なシャットダウンを実行します。 終了は即時ではありません。

関数でApplication->ProcessMessages()を呼び出し、 Application->Terminatedプロパティが trueかどうかを確認します。

計算を多用するループを使用するアプリケーションの場合、ProcessMessages を定期的に呼び出し、Terminated をチェックして、計算を中止し、アプリケーションを終了できるようにするかどうかを決定します。

例えば:

void Calc()
{
  for (int x = 0; x < 1000000; ++x)
  {
    // perform complex calculation

    // check if need to exit
    Application->ProcessMessages();
    if (Application->Terminated)
    {
      break;
    } // end if
  } // end for

  // clean up
} 
于 2010-04-21T23:00:57.497 に答える