c++ - 按住滚动条获取命令提示符以在 Windows 中暂停

标签 c++ windows hardware command-prompt

我有一个程序,我通过 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/

相关文章:

c++ - 使用 QQmlContext::setContextObject 使 C++ 对象对 QML 可见

C++:多态成员可以保持不变吗?

c++ - 如何从 Linux 二进制文件中存储和检索数据

windows - 合并模块与嵌套 MSI

php - 从Windows PC向Linux服务器传输文件时应该使用什么文件传输模式?

c# - python/C++/C#/Java 中两个句子之间的相关性?

c++ - CallWindowProc 在退出时崩溃

r - 为什么 R 在我的(较强的)台式机上比在我的(较弱的)笔记本电脑上慢?

hardware - 构建 CPU 所需的最少晶体管数量是多少?

scala - 凿子:如何避免错误 NO DEFAULT SPECIFIED FOR WIRE