問題タブ [teamcenter-itk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Teamcenter ITK のマルチスレッド化
メイン スレッドから呼び出される別のスレッドとして実行される Teamcenter ITK プログラムを作成しようとしています。メイン スレッドは、UI 上のアクションから呼び出されます。子スレッドは完了するまでに長い時間がかかるため、子スレッドを作成せずにコードをメイン スレッドに配置すると、UI が最大 10 分間フリーズします。これは許容できません。
SSO を使用しているため、メイン スレッドと子スレッドの両方で、メイン スレッドによって行われた認証を共有する必要があります。また、データベースに接続する必要があります。最後に、メイン スレッドは子スレッドが完了するのを待つべきではありません。
子スレッドを呼び出すコードは次のとおりです。
threadReady = 1
実行に 8 分かかるコードを子スレッドで実行しようとするときはいつでも、グローバル変数を設定します。
問題は、メイン スレッドが終了した後に子スレッドが奇妙な動作をすることであり、次のエラーが発生します。
ほとんどの子スレッドは実行されますが、最後にクラッシュすることがあります。
c++ - Teamcenter ITK C++ コードのエラーを効果的に処理する方法
Teamcenter サーバーのカスタマイズ コードで ITK 呼び出しによってスローされたエラーを効果的に処理するにはどうすればよいですか?
C ITK API では、関数は通常、成功/失敗を示す整数値を返します。通常、ゼロ ( ITK_ok
) は成功として扱われ、ゼロ以外は失敗として扱われます。障害が発生した場合、開発者は使用されているリソース (空きメモリなど) をクリーンアップする必要があります。
私は、カスタマイズ開発者がマクロを使用して記述したコードを数多く見てきました。私が最初の Teamcenter ITK プログラムを最初に書いたときもそうしました。
私はそのようなマクロを定義し、ITK 関数呼び出しを行うあらゆる場所でそれを使用しました。例えば:
すべての関数呼び出しの出力を比較して、ITK_ok
何かを行います。何も問題はありません。しかし、実際には多くのことがうまくいかない可能性があり、理解するのが難しい場合があります。
私は人々がこれをしているのを見たことさえあります:
または
つまり、これには何も問題はありません。しかし、コードサイズは増加しませんか? 二重性が見えませんか?
後で、これをよりエレガントでシンプルな方法で行うことができることに気付きました。クラスとオーバーロードされた演算子を使用する C++ の方法。ResultCheck
そして後で、OOTB (out-of-the-box) Teamcenterと呼ばれるものがあることさえ発見しました。
ヘッダー ファイルをインクルードし、そこからクラスを使用するだけです。
ResultCheck
このファイルは、オーバーロードされた代入演算子を持つクラスを宣言します。このファイルは Teamcenter キットに含まれています。ご覧ください。
それは非常に小さくてきちんとした仕事をします。これで、私の以前のステートメントは以下に変換されます。
すべての関数呼び出し return ステートメントで、 のインスタンスResultCheck
が作成されます。ヘッダー ファイルを確認すると、オーバーロードされた代入演算子がifail
(整数) を入力として受け取ることがわかります。ifail
内部的には、そうであるかどうかをチェックしますITK_ok
。そうでない場合は、単に をスローしIFail
ます。そして、やりたいことを何でもできるように、catch ブロックで制御が渡されます。
シンプルですね。それでは、これらのマクロをすべて削除して、これを使用しましょう…</p>