0

私はvs2010を使用して書かれたアプリケーションビジュアルC ++を持っています。「開始」と「停止」の2つのボタンがあります。最初のボタンは処理に時間がかかる関数を呼び出すため、特定の瞬間に停止したいと思います演算停止ボタンを押します。しかし、私のアプリケーションでは、ボタンの開始がまだクリックされているように見え (関数の戻りを待っていると思います)、他のすべてのボタンは無効になっているように見えます。せっかく停止機能があったのに、停止ボタンが押せないので起動できませんでした。ソリューション、アイデア、スレッドの使用、簡単な例? ありがとう。

4

5 に答える 5

2

別のスレッドで計算を実行する必要があります。そうしないと、計算が完了するまで GUI がフリーズします (現時点では 1 つのことしか実行できないため)。

最新のコンパイラを使用している場合は、std::thread を見てください。

他のソリューションは、ブースト スレッドまたは Microsoft スレッドです。

于 2013-08-30T12:57:13.660 に答える
1

計算がループの場合、ユーザーが計算を停止したいかどうかを反復ごとに確認するのは非常に簡単です。

計算スレッドで:

while(compute){
    // one loop of computation
}

GUI スレッドはボタンcomputationを介して false に設定できますが、stop役立つことを願っています

注: Java Swing などのように c++ では、GUI には独自のスレッドがあり (開発者には実際には見えません)、重いタスクを実行するべきではありません。たとえば、ボタンのすべてのコールバックは、GUI の応答性を維持するためにできるだけ小さくする必要があります。このスレッドの仕事は、アプリケーションを駆動することだけです。

于 2013-08-30T13:13:26.653 に答える
0

http://msdn.microsoft.com/it-it/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx

BackgroundWorker はこの用途に最適です!

于 2014-11-28T10:11:24.953 に答える
-1

まず、名前空間をインポートする必要があります

System.Threading の使用;

次に、次のコードを使用します。

Thread T=new Thread(Your Code Goes method name);


your method name()
{
// your code goes here
}
T.Start();

then 


T.Abort();
于 2013-08-30T13:06:40.853 に答える