私はObjective-Cの部分をC++プロジェクトに混ぜています(クロスプラットフォームであるということについては議論しないでください)。
ここで、ココア環境の正しいスレッド(つまりメインスレッド)でいくつかのC++関数またはメソッドを呼び出したいと思います。
私の現在のアプローチは、関数ポインタをObjective-cインスタンス(から派生NSObject
)に渡し、そのインスタンスでperformSelector
/performSelectorOnMainThread
を実行することです。
しかし、performSelector
sは引数としてオブジェクトを期待しているので、通常はこれをどのようにラップしますか?
例:
typedef void(*FnPtr)(void*);
FnPtr fn;
[someInstance performSelector:@selector(test:) withObject:fn];
...ここで、testは次のように宣言されています。
- (void)test:(FnPtr)fn;
今週はobjective-cから始めただけなので、もっと良い方法があれば、それについて聞いて喜んでいることを付け加えなければなりません。
また、プロジェクトはブラウザプラグイン(現在はMac上のSafariのみを対象としている)であるため、メインループやアプリケーションオブジェクトにアクセスできないことにも注意してください。