2012-05-07 2 views
3

MAC OS X 10.7(ライオン)に失敗しました:.....ネットワーク変更イベント登録は、私は次のコードでMAC OS X 10.7(ライオン)にNETWORK_CHANGEイベントを登録しようとした

#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)で返されました。また、返されたerrnoが0

。注:私のアプリケーションは、私は、このステータスをGoogleで検索

すべての問題(登録成功)出てヒョウとSnow Leopardで動作しているが、関連する情報が見つかりませんでした。 誰でもこのNOTIFY_STATUS_FAILEDが返されるシナリオを教えていただけますか?私たちは、自分のアプリケーションにフォーク()システムコールを使用している :


もう一つ私がいることを最近観察しました。 親プロセスに登録しようとするとイベント登録が成功しました。しかし、子プロセスでイベント登録に失敗しました。子プロセスで失敗した理由何か案が!!!

+0

コールはコンソールアプリケーションでは動作しますが、GUIアプリケーションでは動作しません。 – trojanfoe

+0

こんにちは@trojanfoe、あなたの迅速な返答のおかげで。私のアプリケーションはGUIアプリケーションではありません。 – Rajasekhar

+0

fork()したプロセスで、親にすでに登録しているのと同じイベントを再登録しようとしていますか、初めてイベントを登録しようとしていますか? –

答えて

0

通知APIがシステムコールではないため、errnoは0です。これは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(); 


} 
関連する問題