2012-05-07 89 views
3

我試圖通過下面的代碼在MAC OS X 10.7(獅子)註冊NETWORK_CHANGE事件失敗:網絡變更事件註冊在MAC OS X 10.7(獅子)

#define kNotifySCNetworkChange "com.apple.system.config.network_change" 
void init() 
{ 

    status = notify_register_check(kNotifySCNetworkChange, &token); 
    if (status != NOTIFY_STATUS_OK) 
    { 
     cout << "Event Registration failed" <<endl; 
    } 
    cout << "Event Registration Success" << endl; 

} 

.....

如果我在示例程序中使用此代碼,它已成功註冊。 如果我在我的應用程序中使用此函數,notify_register_check()函數返回狀態 1000000(NOTIFY_STATUS_FAILED)。此外,返回的錯誤號是0

注:我的應用程序工作在Leopard和Snow Leopard有任何問題(註冊成功)

我用Google搜索這個狀態,但未能找到相關信息。 任何人都可以告訴我在這種情況下這個NOTIFY_STATUS_FAILED返回?


還有一件事我最近觀察到: 我們使用fork()的系統調用我的應用程序。 當我嘗試在父進程中註冊時,事件註冊成功。但子進程中的事件註冊失敗。爲什麼它在兒童進程中失敗?任何想法!!!

+0

因此,調用在控制檯應用程序中工作,但不在GUI應用程序中? – trojanfoe

+0

嗨@trojanfoe,感謝您的快速回復。我的應用程序不是一個GUI應用程序。 – Rajasekhar

+0

在fork()ed過程中,您是否嘗試重新註冊與您已在父級中註冊過相同的事件,或者您是否嘗試首次註冊事件? –

回答

0

errno爲0,因爲通知API不是系統調用,而是Mach API調用。使用mach_error()獲取更多細節。叉不應該是一個問題(大多數情況下,它也克隆馬赫斯港口)。事實上,下面的代碼在Mountain Lion上工作得很好:

#include <notify.h> 
#include <iostream> 

#define kNotifySCNetworkChange "com.apple.system.config.network_change" 

void init() 
{ 

    int token; 
    int status = notify_register_check(kNotifySCNetworkChange, &token); 
    if (status != NOTIFY_STATUS_OK) 
    { 
     std::cout << "Event Registration failed" <<std::endl; 
    } 
    std::cout << "Event Registration Success" << std::endl; 

} 

int main() 
{ 
int rc = fork(); 
init(); 


}