
私は Windows XP の Matlab で多くのシミュレーションを行っています。通常、私は別のインスタンスで作業している間、長時間のシミュレーションを実行する Matlab を常に 1 つ開いています。
いくつか面倒な点があります。タスク バーの「作業中」ウィンドウ名を誤ってクリックすると、そのウィンドウは永久に (1 時間ほど) 黄色でマークされたままになり、誤って右クリックするとコンテキスト メニューが表示されますが、消えることはありません。他のウィンドウを覆い隠してしまうのが、最も面倒です。
計算を中断せずにこのようなコンテキスト メニューを消す方法についてのヒントがあるかどうか知りたいです。
基本的に、永遠に次のようになります。
wait(0.1)
これまでのところ、コードにいくつかのコマンドを追加すると、この問題は回避できますが、計算速度が著しく低下することがわかりました。したがって、これは選択肢ではないと考えています。
答え1
デフォルトでは、Matlab はユーザー インターフェイス スレッドでシミュレーションを実行すると思います。そのため、シミュレーション中は UI に関連する処理を実行する時間はありません。
これを回避するには、シミュレーションを新しいスレッドで実行するように Matlab に指示する必要があります。これについては SO でいくつか情報を見つけました:
Googleで見つかった情報も、並列コンピューティングツールボックス。
答え2
これは基本的に Windows の設計による副産物です。アプリケーションは UI イベントに応答して「メッセージ」を受信し、ウィンドウの再描画やサイズ変更などの処理はアプリケーション側で行います。
Windows は、UI クリックなどのイベントに応答して適切な「メッセージ」をアプリケーションに送信しますが、アプリケーションはそれらを完全に無視することができ、通常、設計や移植が不適切なアプリケーションではそのように実行される可能性があります。
インタラクティブに「感じられる」ように設計されたアプリケーションは、A) さまざまな瞬間に実行中の処理を中断してそのようなメッセージを処理したり、B) 実際の作業を行う別のスレッドを用意したりします。一部のアプリケーションでは「インタラクティブに感じられる」ことが設計上の優先事項ではないことは理解できますが、アプリケーションが実際に独自のプログラムを実行する開発環境である場合は、「インタラクティブに感じられる」ようにする責任は開発者にあります。Visual Studio で試したことがありますが、誤って無限ループを作成し、アプリケーションの CPU 使用率が 100% まで急上昇するプログラムを実行すると、UI で同様のことが発生します。
今のところ、これらのプログラムの名前は思い出せませんが、多くの Linux デスクトップにあるような「複数のワークスペース」機能を実行できるプログラムがいくつかあります。そのようなプログラムを使用して MATLAB のインスタンスを別々のワークスペースに配置できれば、誤ってクリックしてしまうのを防ぐのに役立つかもしれません。