0

以下のコードは私のプラグインをクラッシュさせます:

NSOpenPanel *openFileDig = [NSOpenPanel openPanel];    
[openFileDig setCanChooseFiles:true];      
[openFileDig setCanChooseDirectories:false];     
[openFileDig setAllowsMultipleSelection:false];     
[openFileDig setDirectory:NSHomeDirectory()];     
if ([openFileDig runModal] == NSOKButton)   
{       
    .........     
}

何もしなくても、openFileDig実行中の約3分で、プラグインは消えます。誰かが理由を教えてもらえますか?

4

1 に答える 1

2

NPAPI呼び出しの途中でメインスレッドをブロックしています-これはほとんどNPAPIno-no#1です。

NPAPI呼び出し中にメインスレッドをブロックしないでください。しばらく時間がかかり、コールバックが必要なことを行う必要がある場合は、非同期で実行してから、javascriptにコールバックを返す必要があります。(npapi関数に渡されるjs関数は、NPN_InvokeDefaultを呼び出して呼び出すことができるNPObjectになります)

runModalはメインスレッドで実行する必要があるため、performSelectorOnMainThreadなどを使用して、それを呼び出す関数を呼び出し、完了したらjsコールバックを呼び出す必要があります。また、すべてのNPAPI呼び出しはメインスレッドで行われる必要があり、問題がないことを忘れないでください。

何が起こるかというと、プラグインがブロックされるため、プラグインから長い間応答がなかった後のブラウザは、プラグインがクラッシュしたと見なして強制終了します。

于 2012-12-12T05:09:59.503 に答える