問題タブ [cvi]
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.
thread-safety - LabWindows/CVI で ThreadSafe 変数マクロを使用する
LabWindows/CVI 環境でスレッド セーフ変数マクロを使用していますが、解放される前にスレッド セーフ変数へのポインターを取得できることがわかりました。(前回のリクエストより)
私が保護しようとしているデータは であるため、struct
ネスト レベルを明示的に設定することはできません。したがって、ネスト レベルは 0 のままであると仮定します。つまり、単一のスレッド セーフ ポインタが発行されると、2 番目のリクエストは拒否されます。第一弾が発売されるまで。ただし、デバッグ セッションをステップ実行しているときに、これが当てはまらないことがわかりました。F8ステップインDefineThreadSafeVar(CLI, SafeCli);
キーを使用し続けることでステートメントの実行が続行され、スレッド セーフ変数へのポインターに対する後続の要求は、元の変数を解放することなく許可されます。
私の予想では、これらのマクロは、スレッドセーフ変数へのポインターが発行され、まだ解放されていない場合、その変数へのアクセスを防止する必要があります。
私の期待は間違っていますか?
または、呼び出しを正しく実装していませんか?
ここに私のソースコードがあります:
c - Cスレッド、CVI:スレッドから配列を返す方法は?
マルチスレッドプログラムに問題があります。一連のいくつかの整数配列 (通常は 2 または 3) があり、それぞれが別のスレッドで処理されているとします。なんとか計算を行うことができましたが、スレッド内で作成された処理済みの配列を返したいと思います。
スレッドを開始した後、0.05 秒ごとにスレッドの完了をチェックする次のループを開始します。これはうまくいくようです。
問題は、ドキュメントによると、スレッドから単なる int 以外のものを取得できないことです。これは、次の関数を使用しようとすると失敗します - int** (imageThreadPart[n] に格納された 2D 配列) を取得しようとすると、関数は int* を渡すように強制します。
1. この関数を使用してこの配列を取得することは可能ですか?
2. 遠回りかもしれませんが、次の関数のコールバックを使用してその配列をコピーし、スレッドから返された値をこのコールバックに直接渡すことはできますか?
c++ - sprintf %g 指定子が与えるポイントの後の桁数が少なすぎます
浮動小数点変数を ini ファイルに書き込もうとしていますが、フォーマット指定子で問題が発生しました。float 値があります。101.9716 とします。今、私はそれを自分のiniファイルに書きたいのですが、問題は、精度の低い別のfloat値(15.85など)があり、その値が同じループでiniファイルに書き込まれていることです。私もです:
私の他のすべての変数は、「20」(20.00000の場合)、「13.85」(13.850000の場合)などのような素敵な文字になります。しかし、なぜか101.9716が「101.972」になってしまいます。なぜこれが起こるのか、そして私のイデオロギーを台無しにせずに「101.9716」にする方法を教えてください。助けてくれてありがとう。
c - C - デバッグ モードがコールバック イベントを認識しない
Labwindows/CVI で簡単な UDP 転送プログラムを作成しようとしています。アイデアは、2 つの UDP チャネルを作成し、1 つを使用してデータをポートに書き込み、もう 1 つを使用してデータを受信して出力するというものです。
受信側は次のとおりです。
私の主な問題は、デバッグモードで実行すると、表示されたコールバック関数が呼び出されないことです。つまり、「コールバックが呼び出されました」が出力されず、結果のreadChannel()
呼び出しに保存または出力されたデータは表示されません。
ただし、コンパイルして .exe として実行すると、意図したとおりに動作します。そのポートでデータが受信されるたびに、コールバックが実行されます。
これが発生する原因となるデバッグ バージョンと「リリース」バージョンの違いは何ですか?
getchar()
編集:多くのテストの後、メインスレッドがハングアップする原因となったような関数を使用してメッセージを待機することに関係していると思います。なぜリリースモードで動いたのかはわかりませんが、出力ウィンドウの違い(?)が関係しているのではないでしょうか。私の解決策は、コールバックを削除し、受信チャネルを独自のスレッドで実行することでした。このようにして、スレッドは常にメッセージを待っています。
UDPRead(readerChannel, 0, 0, UDP_WAIT_FOREVER, NULL, NULL)) < 0)
そして、メインスレッドは必要に応じてメッセージを取得できます。誰かが追加情報を持っている場合は、私に知らせてください。
c - アナログ入力からアレイへのボルト DC を測定し、RMS でボルト DC を計算します。
私は GeoTest ATEasy と LabWindows\CVI でテストの自動化を開発しています。テストでは、アナログとデジタルの出力\入力を測定します。
テストの1つでは、オーディオ信号を含むアナログ入力を測定し、そのHzとVolt DC RMSを確認する必要があります。
オーディオ信号はRMSで 5Hz および 2 ボルト DCです。
複数の Volt サンプルを配列に測定する可能性がありますが、何を、何をサンプリングしたいかを決定する必要がありsample rate
ます# of samples
。
測定後、信号がRMSで 5Hz および 2 ボルト DC であることを確認する必要があります。
データを分析して、信号が実際にRMSで 5Hz および 2 ボルト DC であるかどうかを確認する方法について何か提案はありますか?
これらの計算を実行できるアルゴリズムまたはライブラリ関数が必要です。
私のsample rate
と# of samples
(配列のサイズでもある)はどうあるべきですか?
c - NI VISION imaqDetectLines()関数使用時の一般保護エラー
Labwindows\CVI で National Instruments Vision モジュールを使用しています
何らかの理由で、 func を使用するとimaqDetectLines()
、FATAL RUN-TIME ERROR: "Angle tracker.c", line 50, col 11, thread id 0x00002004: The program has caused a 'General Protection' fault at 0x6C5AD446.
これは私のコードです:
私が実際にやっていることは次のとおりです。
BMP ファイルを開く
SOBEL
imaqEdgeFilter()
を使用してfuncでエッジフィリングimaqDetectLines()
次に、関数で行を検出したい
image-processing - Labwindows\CVI の NI VISION で画像の緑色を識別
私は imaqColorHistogram(...)
CVI でNI VISION を使用しています。これは、GREEN スポットを含む必要がある画像 (スポットはほとんどの画像)
レポートには次のものが含まれます。
ほとんどのカラー画像が GREEN に最も近いことを確認したいと思います。
どの ColorMode を使用すればよいですか? そのレポートの基準は何ですか?