gpt4 book ai didi

c - XPC 服务阵列崩溃

转载 作者:行者123 更新时间:2023-11-30 17:23:26 32 4
gpt4 key购买 nike

我正在使用 C 接口(interface)来实现 XPC 服务;顺便说一句,除了以下问题之外,我的 XPC 服务运行得非常好。

有一天我尝试通过 XPC 发送一个“大”数组; 200,000 个条目的数量级。通常,我的应用程序处理大约几千个条目的数据,并且没有任何问题。对于其他用途,此大小的数组可能并不特殊。

这是我用于生成数组的 C++ 服务器代码:

  xpc_connection_t remote = xpc_dictionary_get_remote_connection(event);
xpc_object_t reply = xpc_dictionary_create_reply(event);

xpc_object_t times;
times = xpc_array_create(NULL, 0);

for(unsigned int s = 0; s < data.size(); s++)
{
xpc_object_t index = xpc_uint64_create(data[s]);
xpc_array_append_value(times, index);
}

xpc_dictionary_set_value(reply, "times", times);
xpc_connection_send_message(remote, reply);

xpc_release(times);
xpc_release(reply);

这是客户端代码:

  xpc_object_t times = xpc_dictionary_get_value(reply, "times");
size_t count = xpc_array_get_count(times);
for(int c = 0; c < count; c++)
{
long my_time = xpc_array_get_uint64(times, c);
local_times.push_back(my_time);
}

如果我尝试处理大型数组,则会出现段错误 (SIGSEGV)

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libxpc.dylib 0x00007fff90e5cc02 xpc_array_get_count + 0

最佳答案

当你说“极大的数组”时,你指的是那些被 launchd 视为资源占用并杀死的东西?

XPC 仅真正适用于短时快速事务运行,而不是冗长的基于服务的运行。

如果您要调用使 launchd 等待的电话,那么我建议您尝试 https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html

当服务终止时..除了 SIG_ABORTS 等之外是否有任何特定事件被触发?

您是否收到“xpc 服务已失效”(这通常意味着 launchD 杀死了它,或者您是否收到“xpc 服务/过早退出”,这通常是处理程序代码错误。

关于c - XPC 服务阵列崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27593223/

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