English 中文(简体)
主程序与 QProcess 同步输出吗?
原标题:Synchronizing output between a main program and a QProcess?

我构建了一个程序, 进行一些用户测试, 并且需要记录关于他们正在做什么的数据, 间隔极小( 每10米 ) 。 大多数数据都可以从 QT 中找到, 但不幸的是我需要使用一个单独的程序来计算鼠标的移动( 即使鼠标已经击中屏幕边缘, 我也需要移动, 但是 QT 忽略了屏幕外的移动 ) 。

因此,我建立了一个窗口程序,处理低水平鼠标输入和输出所检测到的坐标变化。然而,问题在于我无法从窗口程序获取数据,使其与主程序输出相匹配。

在我的主要程序里,我使用以下代码。

mouseTracker = new QProcess();
mouseTracker->start("C:\WindowsFun.exe",QIODevice::ReadWrite|QIODevice::Unbuffered);
mouseTracker->setProcessChannelMode(QProcess::MergedChannels);
connect(mouseTracker,SIGNAL(readyRead()), this, SLOT(readMouseData()),Qt::DirectConnection);

和读取MouseData 函数看起来像这个 。

void HideWindow::readMouseData(){
    QByteArray data = mouseTracker->readAll();
    QString text = QString(data);
    saveFileStream << text.toStdString();
}

有些东西可能是不必要的。我添加到“ 混凝土通道” 模式和“ 直接连接” 模式中, 试图解决问题 。

我得到的结果是窗口程序的输出在每100米左右的大块区域中出现, 而不是在文件流中插入, 而不是当它发生时插入。 它似乎有一个需要填充的缓冲, 或者在待发Read () 信号处理前出现延迟 。 有人建议我如何实时从主程序和 Process 获得输出吗? (至少延迟不到 10 分钟 ) 。

此外,如果重要的话,我正在运行 Windows 7, 并使用 MinGW 来编集主程序, 用于检测鼠标运动的窗口程序2008年视觉工作室。 窗口中的输出是这样的 :

int xPosRelative = raw->data.mouse.lLastX;
int yPosRelative = raw->data.mouse.lLastY;
char output[100];
int n;
n = std::sprintf(output,"%d %d",xPosRelative,yPosRelative);
std::printf("%s
",output,n);
std::fflush(0);

如果还需要信息,请告诉我。

Thanks, -Keilan

最佳回答

不幸的是, Windows 的 QProcess 安装是硬码, 以便从外部进程每100 毫秒检查一次 stdout/ stderr 。 查看 Qt 代码后, 您也许可以经常调用 wait forReadyRead 来绕过它( 有少量超时值 ) 。

问题回答

我绝不会依赖 Windows 进程的标准输入/输出。 似乎我多次受到的性能有一些限制, 即使没有 Qt 的参与。

使用本地主机上的网络连接可以做得很好。 这是最普遍和可移动的中继通讯工具。 Qt运行的所有设备都支持它, 并且每个平台的性能预期都是一样的。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签