我有一个程序,我通过 National Instruments (NI) 的 ADC 系统记录数据。
设备缓冲信息一段时间,然后程序在某个时刻收集缓冲数据。如果程序收集的数据大于缓冲区,那么缓冲区将不得不在我的程序接收数据的情况下释放,这将导致 NI 库抛出异常,指出请求的数据不再可用,因为它丢失了。
由于我的程序是命令提示符程序,如果用户单击并按住滚动条,程序会暂停,这可能会导致此问题发生。
如何在不增加缓冲区大小的情况下解决这个问题?我可以在 Windows 中禁用这个持有的东西吗?
谢谢。
最佳答案
只有试图输出到控制台的线程才会被阻塞。将其作为一个单独的线程,您的问题就会消失。
当然,您需要缓冲输出,并在缓冲区溢出时采取一些明智的措施。
作为引用,这是我用来测试它的简单代码,您会注意到即使按住滚动条,计数器也会继续增加:
#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;
}
关于c++ - 按住滚动条获取命令提示符以在 Windows 中暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837941/