Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-120615

QT5.6在Server2008R2上出现崩溃和信号丢失的问题

    XMLWordPrintable

Details

    • Bug
    • Resolution: Invalid
    • Not Evaluated
    • None
    • 5.6.0
    • Core: Event loop
    • None

    Description

      您好,我是一名研发人员,最近客户那边反馈有部分电脑出现业务运行异常的问题,我们这边排查后发现是Qt发送的信号丢失了。Qt的版本为5.6.0。需要注意的是,不是所有的server2008R2都有该问题,我这的装的就没复现。目前发现有两个不同的用户反馈过该问题

       

      我写了个测试程序,发现即使是非常简单的测试程序,在SYSTEM账户下运行,仍然会有该问题。在用户账户下则没有任何问题。目前发现的问题有两个:

      1. 如果Qt的程序是界面程序,即内部会创建界面,那么在进入事件循环一段时间后(大概几秒钟),就会产生崩溃,且期间的所有信号均丢失
      2. 如果Qt的程序是非界面程序,即内部不会创建任何界面,那么就不会崩溃,但是所有信号仍会丢失

       

      附件为测试程序的源代码,测试程序主要有三个运行模式:

      1. 命令行为/regsvc:创建一个服务名为TestQtSingnal的服务,该服务会启动命令行为/svc的该进程,方便进入服务态运行
      2. 命令行为/svc:启动一个无命令行的该进程
      3. 无命令行:创建一个继承QObject的对象,该对象内部会创建两个线程发送信号,主线程在接收到信号后会输出日志信息

       

      测试方法:

      1. 编译和部署项目
      2. 使用管理员权限运行exe /regsvc 注册服务
      3. 到服务里面启动 TestQtSingnal 服务
      4. 等待30秒(这个等待时间可以在代码里面修改)
      5. 查看dbgview或者测试程序旁边的toolslog文件夹里面的log文件,其中sig为发送信号的日志标识,slot为接收信号的日志标识,目前在system下运行只有sig,没有slot,在用户账户下运行则正常。

      通过将qt_test对象修改为继承QWidget,即可测试界面程序的情况,在这种情况下会发生崩溃

       

      问题描述完毕,希望协助帮忙看一下,非常感谢!

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            thiago Thiago Macieira
            chen-qax chen-qax
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes