• 8743阅读
  • 3回复

关于图形化界面编程时“进程死锁”的探讨 [复制链接]

上一主题 下一主题
离线rockyluo
 

只看楼主 倒序阅读 楼主  发表于: 2011-02-15
目前项目中采用了多进程的机制(暂且称作A进程和B进程)
两进程均使用GUI编程,主要任务:
A进程 -> 主进程,是项目主程序;
B进程 -> 子进程,主要用来显示一个gif的图标,另外还负责一些扫描任务(线程完成);

两进程间采用Linux系统的信号(自定义的)来通信

主要构思:  
用户操作到的是A进程,在操作A进程的过程中会发生一些“耗时操作”,此时会导致界面被冻结而无法响应,
这时候我在耗时操作前,先发送一个系统级的信号来启动B进程上gif图标的显示(表示用户等待),待耗时操作完毕再发送一信号关闭B进程上gif图标的显示。

问题
目前功能已完全实现,效果也很不错,唯一一点是偶尔会发生进程的假死,A进程无法操作,B进程上的那个gif图标也不动了
ps下,两进程都还在,  top下也都还正常,   就是界面一点反应也没有
另外kill掉的话终端会出现系列输出:
[root@rocky]# QWSLock::lock: Identifier removed
QWSLock::unlock: Invalid argument
QWSLock::lock: Invalid argument
QWSLock::lock: Invalid argument

因为两进程均采用了GUI,所以共用一个qwsserver,是不是qwsserver处理界面的时候有问题?
或是其他什么原因造成?
盼解惑!
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线XChinux

只看该作者 1楼 发表于: 2011-02-15
Qt要求GUI部分都必须在主线程内。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线rockyluo

只看该作者 2楼 发表于: 2011-02-15
老大,你说的没错
我是采用的两个进程啊
GUI的部分都在进程里
B进程中开的线程仅仅完成一些扫描任务(一些耗时非GUI任务),
而gif的显示还是在B进程中完成的
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线sbtree
只看该作者 3楼 发表于: 2011-02-15
对嵌入式不太了解,路过,关注一下
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个