You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用UHD的C++程序致后启动X转发PyQt应用挂起问题排查

问题:UHD初始化后PyQt GUI无法在SSH X转发环境启动

项目背景

  • 基于Ettus Research X440电台开发项目,底层依赖UHD API
  • 核心组件:
    • C++模块:处理所有UHD/USRP调用,以及电台与流端点的高速接口
    • Python脚本(NiceGUI):向C++模块发送命令,控制USRP行为
    • Python脚本(PyQt):通过ZMQ接收低速率样本,展示基础频谱分析视图
  • 运行环境:无头RHEL9服务器,通过SSH远程访问并启用X转发

问题现象

  • 若在C++模块调用uhd::usrp::multi_usrp::make()之前启动PyQt频谱脚本:GUI正常弹出,X转发窗口可正常交互,UHD初始化完成后仍能继续运行
  • 若在C模块调用该函数之后启动PyQt脚本:脚本执行到打印"Done here"的初始化步骤,但窗口始终不显示;无法通过CTRL-C终止脚本,只有终止C应用后,GUI才会立刻弹出

怀疑方向

X440数据速率较高,UHD底层使用DPDK,推测问题出在系统层面,Python侧调试无法定位原因

复现代码

最简PyQt GUI代码

from pyqtgraph.Qt import QtWidgets, QtCore

class myGui(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        # Layout
        layout = QtWidgets.QVBoxLayout(self)
        ctrl_layout = QtWidgets.QHBoxLayout()
        layout.addLayout(ctrl_layout)
        print("Done here") # 若在C++应用后启动,该行会打印但窗口不显示


def main():
    print("main")
    app = QtWidgets.QApplication([])
    gui = myGui()
    gui.resize(1200, 900)
    gui.show()
    app.exec()


if __name__ == "__main__":
    main()

导致挂起的最简C++代码

#include <uhd/convert.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <uhd/utils/safe_main.hpp>
#include <uhd/utils/thread.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <chrono>
#include <thread>


int UHD_SAFE_MAIN(int argc, char* argv[]) {
    // minimal config for demonstration
    uhd::usrp::multi_usrp::sptr usrp_;
    std::cout << "Before usrp, waiting 20 seconds" << std::endl; // 此阶段启动GUI不会挂起
    std::this_thread::sleep_for(std::chrono::seconds(20));
    std::cout << "Making USRP" << std::endl;
    usrp_ = uhd::usrp::multi_usrp::make("addr=192.168.10.2, second_addr=192.168.20.2," 
        "mgmt_addr=192.168.200.2,use_dpdk=1, master_clock_rate=500e6,"
        "converter_clock_rate=4e9");

    std::cout << "Finished making USRP, waiting 20 seconds" << std::endl; // 此阶段启动GUI会挂起
    std::this_thread::sleep_for(std::chrono::seconds(20));
    return 0;
}

内容的提问来源于stack exchange,提问作者cawald_18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:13:10