2014-12-21 96 views
0

我爲XPC服務使用C接口;順便說一句,我的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 
+1

過量進食是在聖誕節的時候一個常見的問題 –

+0

那麼每個條目的大小是多少?只有當條目數量很大時才能看到這個數字,例如2lakh?看起來像堆棧溢出 – Gopi

回答

0

當你說「非常大的陣列」,你說的東西,launchd可能regar作爲一個資源生豬和殺人?

XPC只是真正意義上的快速交易運行而不是冗長的基於服務的運行。

如果你要撥打電話,讓launchd的等待,那麼我建議你嘗試https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html

當服務死..是否有任何特定事件等則SIG_ABORTS等..解僱?

你得到「XPC服務被認定無效」(這通常意味着launchd會殺了它,還是你拿「XPC服務/退出過早」,這通常是處理程序代碼錯誤。

+0

您可以在我的問題中看到我想要處理的數據大小。不是服務運行,我只是從子進程傳輸一些數據。 – koan