QNX中进程间通信(IPC)之Signal篇


主要内容翻译自QNX开发文档,根据自己理解翻译,错误之处在所难免,目的还是提供给大家对照阅读,我自己也写了一些代码,抽空后继也会放上

 

 

如果应用程序需要处理信号 (signal) ,你需要设置信号处理函数 (signal handler) 。你不能在信号处理函数中调用 Photon 函数的原因是由于 widget library 是非可重入和信号安全的。

为了绕开这个问题, Photon library 包含了一个信号处理函数,你注册一个信号处理函数后, Photon 会稍后调用:

l  Photon signal handler 返回

l  所有当前 widget 的处理都已完成

注意 :当你使用这种信号处理方式,你将得不到严格的实时性,这是因为信号处理函数不是立即调用的。

1.1     Adding a signal-processing function

调用 PtAppAddSignalProc() 函数来添加信号处理函数,典型应用与:

l  应用程序初始化函数

l  某窗口的设置函数

需要包含 文件。

 

PtAppAddSignalProc() 函数语法如下:

int PtAppAddSignalProc( PtAppContext_t app,

                        sigset_t const *set,

                        PtSignalProc_t func,

                        void *data);

参数列表:

app

应用程序上下文。

set

可能导致信号处理函数被调用的信号集合的指针。使用 sigemptyset() sigaddset() 函数建立该集合。更多信息参见 QNX Neutrino Library Reference

func

信号处理函数。参见 Photon Library Reference 中的 PtSignalProc_t

data

函数所传递数据。

PtAppAddSignalProc() 返回 0 表示成功, -1 表示失败。

信号处理函数原型如下:

int signalProcFunctions (int signum

                         void *data);

参数列表如下:

signum

处理的信号数量。

data

PtAppAddSignalProc() 函数中指定的 data 参数。

如果你希望保留该信号,返回 Pt_CONTINUE ,删除信号返回 Pt_END( 如果函数还被其他信号注册,在其他信号产生时将再次被调用 )

1.2     Removing a signal-processing function

删除信号处理函数:

调用 PtAppRemoveSignal() 删除单个或所有信号处理函数、数据对。

在信号处理函数中返回 Pt_END ,如果函数被多次注册,将会保持安装状态。

你可能感兴趣的:(QNX)