如何显示api函数的输出?

2024-01-08

抱歉问基本问题。我正在尝试在 QPlainTextWidget 中显示 json。我有 api 函数,它有控制台输出并包含所有需要的数据。看起来像这样:

 int iperf_run_server(struct iperf_test *test)
 {
int result, s, streams_accepted;
fd_set read_set, write_set;
struct iperf_stream *sp;
struct timeval now;
struct timeval* timeout;
......
if (test->json_output)
    if (iperf_json_start(test) < 0)
        return -1;

if (test->json_output) {
    cJSON_AddItemToObject(test->json_start, "version", cJSON_CreateString(version));
    cJSON_AddItemToObject(test->json_start, "system_info",        cJSON_CreateString(get_system_info()));
} else if (test->verbose) {
    iprintf(test, "%s\n", version);
    iprintf(test, "%s", "");
    fflush(stdout);
    printf("%s\n", get_system_info());
}
.....
cleanup_server(test);

if (test->json_output) {
    if (iperf_json_finish(test) < 0)
        return -1;
} 

....
return 0;
}

现在我有第一个线程与我的图形用户界面,第二个线程包含在信号上运行此函数的类。一切正常,但我不完全理解,如何“停止” iperf_run_server 来“读取/缓冲”输出,而不需要对 api 进行任何更改。


最简单的做法是收集字符串中的每条消息,并从第二个线程中运行的对象发出信号。您可以将该信号连接到 GUI 线程中对象中的槽。每次事件循环完成处理其他事件时都会调用零超时计时器 - 这是一种有用的机制,可以利用“连续”运行事物。

例如:

#include <QApplication>
#include <QPlainTextEdit>
#include <QThread>
#include <QBasicTimer>
#include <QTextStream>

//! A thread that's always safe to destruct.
class Thread : public QThread {
private:
   // This is a final class.
   using QThread::run;
public:
   Thread(QObject * parent = 0) : QThread(parent) {}
   ~Thread() {
      quit();
      wait();
   }
};

class IperfTester : public QObject {
   Q_OBJECT
   struct Test { int n; Test(int n_) : n(n_) {} };
   QList<Test> m_tests;
   QBasicTimer m_timer;
public:
   IperfTester(QObject * parent = 0) : QObject(parent) {
      for (int i = 0; i < 50; ++i) m_tests << Test(i+1);
   }
   //! Run the tests. This function is thread-safe.
   Q_SLOT void runTests() {
      QMetaObject::invokeMethod(this, "runTestsImpl");
   }
   Q_SIGNAL void message(const QString &);
private:
   Q_INVOKABLE void runTestsImpl() {
      m_timer.start(0, this);
   }
   void timerEvent(QTimerEvent * ev) {
      if (ev->timerId() != m_timer.timerId()) return;
      if (m_tests.isEmpty()) {
         m_timer.stop();
         return;
      }
      runTest(m_tests.first());
      m_tests.removeFirst();
   }
   void runTest(Test & test) {
      // do the work
      QString msg;
      QTextStream s(&msg);
      s << "Version:" << "3.11" << "\n";
      s << "Number:" << test.n << "\n";
      emit message(msg);
   }
};

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QPlainTextEdit log;
   // This order is important: the thread must be defined after the object
   // to be moved into the thread.
   IperfTester tester;
   Thread thread;
   tester.moveToThread(&thread);
   thread.start();
   log.connect(&tester, SIGNAL(message(QString)), SLOT(appendPlainText(QString)));
   log.show();
   tester.runTests();
   return a.exec();
   // Here, the thread is stopped and destructed first, following by a now threadless
   // tester. It would be an error if the tester object was destructed while its
   // thread existed (even if it was stopped!).
}

#include "main.moc"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何显示api函数的输出? 的相关文章

随机推荐

  • 正则表达式与嵌套括号匹配

    OK 我不知道是否可以编写这个正则表达式 所以我将从寻求帮助开始 到目前为止我还没有成功 源字符串 convert varchar 8000 lt text as reason 所需的匹配 convert varchar 8000 lt t
  • 如何处理 R 回归中残差中的 NA?

    所以我遇到了一些问题NAa 的残差值lmR 中的横截面回归 问题不在于NA价值观本身 这就是 R 呈现它们的方式 例如 test residuals 1 2 4 5 0 2757677 0 5772193 5 3061303 4 51028
  • 为组创建唯一的 id

    我正在解决一个问题 我必须对相关项目进行分组并为其分配唯一的 ID 我已经用 python 编写了代码 但它没有返回预期的输出 我需要帮助来完善我的逻辑 代码如下 data child list for index row in df it
  • 如何将 EF6 与 ASP.NET Core 1 结合使用

    我创建了一个 ASP NET Core 1 项目并使用 Net Core 1 0 框架 并且想要使用实体框架6 我按照这个教程https docs efproject net en latest platforms aspnetcore n
  • Json (fasterxml) stackoverflow 异常

    当尝试序列化类别时 我遇到了 stackoverflow 例外 警告 StandardWrapperValve dispatcher Servlet service for servlet 调度程序抛出异常 java lang StackO
  • onCreate 正在复制视图

    我正在松散地遵循阳光课程 但遇到了问题 In my MainActivity onCreate方法 它最初称为 protected void onCreate Bundle savedInstanceState mStudentId Uti
  • 无法弄清楚为什么 PHP 没有从 $.ajax 调用接收 POST 数据

    我以前并不是没有做过同样的过程 但我不明白为什么我的 PHP 脚本的 POST 数据是空的 这是我所做的 发现的 我已经验证 ajax 调用的 data 参数具有值 submitSearch 函数和 success 参数中的警报显示搜索变量
  • applyBindings() 太快,在 Ajax 请求完成之前调用

    请考虑以下 ViewModel 片段 var id given1 given2 get testSynUfGet aspx null function data id data id given1 data given1 given2 da
  • 在 Windows 中将 python .py 作为服务启动

    我创建了一个 Windows 服务来启动 py 脚本 sc create Maraschino binPath C HTPC Maraschino maraschino cherrypy py DisplayName Maraschino
  • UITextView firstRectForRange 返回错误的框架

    Edit 简单的解决方案是将所有帧计算从viewDidLoad to viewDidAppear 我很难让以下代码正常工作 该代码返回 UITextView 中给定 NSRange 的第一帧 如果没有换行符 它就可以工作 但是当我在 UIT
  • MonoDevelop 中的调试/跟踪输出

    在 MonoDevelop 中哪里可以看到 System Diagnostics Debug 和 System Diagnostics Trace 输出 我认为它应该出现在 ApplicationOutput 窗口中 但无处可寻 应用程序输
  • 关于图像加载 IE 问题的 JavaScript/jQuery 事件侦听器

    我正在寻找一种方法来为尽可能多的浏览器实现此功能 var image new Image image addEventListener load function alert loaded false image src image url
  • C++ math.h abs() 与我的 abs() 相比有什么不同

    我目前正在用 C 编写一些像向量数学类的 glsl 并且我刚刚实现了一个abs 像这样的函数 template
  • 如何使用 Python 模块 Dragonfly 识别语音?

    我一直在试图弄清楚如何使用 Dragonfly 模块 我查看了文档 但似乎不知道如何使用它 我只想能够识别一些短语并根据这些短语采取行动 是的 这个例子将终止 我已经看过这个特定的例子很多了 它缺少一些关键功能 首先是 pythoncom
  • Apache Spark join 操作的扩展能力较差

    我在 Apache Spark 上运行 join 操作 发现没有弱可扩展性 如果有人能解释这一点 我将不胜感激 我创建两个数据帧 a b 和 a c 并通过第一列连接数据帧 我为 一对一 连接生成数据帧值 另外 我使用相同的分区器来避免随机
  • 文本字段在 iOS 模拟器上不显示键盘

    我试图使用基本文本字段在这里构建一个简单的登录屏幕 但我无法让键盘出现在模拟器中 通过物理键盘输入效果很好 但在 iOS 模拟器中没有可见的键盘 我必须明确打开它还是什么 感觉我在这里错过了一些非常基本的东西 buildLoginScree
  • 封闭件损坏 - 请帮我修复它

    in a 相关问题 https stackoverflow com questions 4584397 javascript countdown clock 4584501我已经发布了这段代码 它几乎可以工作 但计数器却不能 我们可以修复它
  • 如何在 OpenVDB 中对网格进行下采样

    OpenVDB中有什么好的方法可以对体素网格进行下采样吗 例如 我有体素大小为 1 0 的网格 8x8x8 我想要获得体素大小为 2 0 的网格 4x4x4 each voxel of new grid is some interpolat
  • CoreAudio - 如何确定播放aac文件的结尾

    我正在 iPhone 上使用 CoreAudio 但我无法找到如何知道歌曲何时播放完毕 我放了一个属性监听器kAudioQueueProperty IsRunning 它在开始播放时有效 但在文件结尾时无效 当我停止 AudioQueue
  • 如何显示api函数的输出?

    抱歉问基本问题 我正在尝试在 QPlainTextWidget 中显示 json 我有 api 函数 它有控制台输出并包含所有需要的数据 看起来像这样 int iperf run server struct iperf test test