gpt4 book ai didi

c++ - 理解 Property IPC 通信

转载 作者:行者123 更新时间:2023-11-28 08:08:09 25 4
gpt4 key购买 nike

我正在研究这个 source base .基本上这是 Symbian 第 3 版的 Anim 服务器客户端,用于抓取输入事件而不以可靠的方式使用它们。

如果你发现this line of the server ,这里基本上是设置 RProperty 值(显然是一个递增的计数器);似乎没有对输入进行实际处理。

内部this client line ,客户端应该接收通知数据,但它只调用 Attach。

我的 understanding is that Attach只要求调用一次,但在客户端并不清楚服务器每次设置RProperty时触发什么事件

客户端应该如何(以及在​​哪里)访问 RProperty 值?

最佳答案

Attach 之后,客户端将在某处Subscribe 传递TRequestStatus 引用的属性。当异步事件发生时,服务器将通过内核向请求状态属性发出信号(在您的情况下属性已更改)。如果您的示例源代码以正确的方式实现,您会发现一个事件对象(AO;CActive 派生类)卡在周围,并且该 AO 的 iStatus 将被传递到 RProperty API。在这种情况下,当属性已更改时,将调用 AO 的 RunL 函数。

了解事件对象框架在 Symbian 中是必不可少的,但很少有人真正做到这一点。不幸的是,我没有在网上找到真正好的描述(它们在 Symbian OS Internals 一书中有很好的解释)但是 this page至少给了你一个简单的例子。

示例

CActive 的 CMyActive 子类的 ConstructL 中:

CKeyEventsClient* iClient;
RProperty iProperty;
// ...

void CMyActive::ConstructL()
{
RProcess myProcess;
TSecureId propertyCategory = myProcess.SecureId();
// avoid interference with other properties by defining the category
// as a secure ID of your process (perhaps it's the only allowed value)
TUint propertyKey = 1; // whatever you want

iClient = CKeyEventsClient::NewL(propertyCategory, propertyKey, ...);
iClient->OpenNotificationPropertyL(&iProperty);

// ...

CActiveScheduler::Add(this);
iProperty.Subscribe(iStatus);
SetActive();
}

当属性被改变时你的 RunL 将被调用:

void CMyActive::RunL()
{
if (iStatus.Int() != KErrCancel) User::LeaveIfError(iStatus.Int());
// forward the error to RunError

// "To ensure that the subscriber does not miss updates, it should
// re-issue a subscription request before retrieving the current value
// and acting on it." (from docs)
iProperty.Subscribe(iStatus);

TInt value; // this type is passed to RProperty::Define() in the client
TInt err = iProperty.Get(value);
if (err != KErrNotFound) User::LeaveIfError(err);

SetActive();
}

关于c++ - 理解 Property IPC 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com