2012-05-07 90 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(); 


}