主题 : 求助:qtopia应用使用signal不成功 复制链接 | 浏览器收藏 | 打印
未设置
级别: 侠客
UID: 19393
精华: 0
发帖: 55
金钱: 275 两
威望: 55 点
综合积分: 110 分
注册时间: 2010-04-19
最后登录: 2011-10-09
楼主  发表于: 2010-06-05 10:41

 求助:qtopia应用使用signal不成功

整个是从友善的hello示例的基础上改的:

main.cpp (部分):
#include <signal.h>
#include <sys/types.h>
#include <qmessagebox.h>
void sigusr1_handler(int)
{
        QMessageBox::information(NULL,QObject::tr("sigaction"),QObject::tr("received a SIGUSR1 signal."));
}

int main(int argc,char **argv)
{
        struct sigaction action;
        sigaction(SIGUSR1,NULL,&action);
        action.sa_handler = sigusr1_handler;
        sigaction(SIGUSR1,&action,NULL);

        QPEApplication a(argc,argv,QApplication::GuiClient);
        HelloForm wg;
        wg.showFullScreen();
        return a.exec();
}

Hello.cpp (部分):
#include <signal.h>
#include <sys/types.h>
#include <qmessagebox.h>
void HelloForm::onSigusr1()
{
        QMessageBox::information(this,tr("onSigusr1"),tr("raise a SIGUSR1 by ::raise now."));
        ::raise(SIGUSR1);
}

onSigusr1连接到界面上一个按钮的onclicked信号。现在raise a SIGUSR1 by ::raise now.对话框式能弹出的,说明下面的::raise应该也是执行了的。
但从表面上看,QMessageBox::information(this,tr("onSigusr1"),tr("raise a SIGUSR1 by ::raise now."));这个对话框点击OK之后,界面就死了,完全没有进入void sigusr1_handler(int),这是为什么呢?
未设置
级别: 侠客
UID: 19393
精华: 0
发帖: 55
金钱: 275 两
威望: 55 点
综合积分: 110 分
注册时间: 2010-04-19
最后登录: 2011-10-09
1楼  发表于: 2010-06-05 12:16
奇怪,我在收到SIGUSR1 signal时,如果不QMessageBox,而是打开一个文件并写入部分内容的时候就没问题。
好像不能进行跟qtopia gui相关的操作。是这样吗?