主要内容翻译自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
,如果函数被多次注册,将会保持安装状态。