5

National Instruments (NI) の ADC システムを介してデータを記録するプログラムがあります。

デバイスはしばらく情報をバッファリングし、プログラムはある時点でバッファ データを収集します。プログラムがバッファよりも大きなデータを収集する場合、プログラムがデータを受信せずにバッファを解放する必要があります。これにより、NI ライブラリは、要求されたデータが失われたため、使用できなくなったことを示す例外をスローします。

私のプログラムはコマンド プロンプト プログラムであるため、ユーザーがスクロールバーをクリックして押したままにすると、プログラムが一時停止し、この問題が発生する可能性があります。

バッファサイズを増やさずにこの問題を解決するにはどうすればよいですか? Windowsでこの保留を無効にすることはできますか?

ありがとう。

4

4 に答える 4

4

コンソールに出力しようとしているスレッドのみがブロックされます。これを別のスレッドにすると、問題が解決します。

もちろん、出力をバッファリングし、バッファがオーバーフローした場合に賢明なことを行う必要があります。

参考までに、これをテストするために使用した簡単なコードを次に示します。スクロール バーを押したままにしても、カウンターが増加し続けることがわかります。

#include <Windows.h>
#include <stdio.h>

volatile int n = 0;

DWORD WINAPI my_thread(LPVOID parameter)
{
    for (;;)
    {
        n = n + 1;
        Sleep(800);
    }
}

int main(int argc, char ** argv)
{
    if (!CreateThread(NULL, 0, my_thread, NULL, 0, NULL))
    {
        printf("Error %u from CreateThread\n", GetLastError());
        return 0;
    }
    for (;;)
    {
        printf("Hello!  We're at %u\n", n);
        Sleep(1000);
    }
    return 0;
}
于 2013-02-12T18:50:45.727 に答える