iOSではなく、WindowsおよびUNIXのC/C++でiOS objective-c "performSelectorOnMainThread"機能をいくつか作成できますか? 多くのありがとうございます。他のスレッドからメインスレッド上でクラスメソッドまたは関数(静的メソッド)を実行する
0
A
答えて
1
いいえ、自分でロールバックする必要があります。これを行う1つの方法は、メインスレッドがメインループの各繰り返しをチェックするグローバル関数ポインタを保持することです。例:Windowsの代わりにPOSIXのために
// Global variables
pthread_mutex_t gMutex = PTHREAD_MUTEX_INITIALIZER;
void (*gFuncPtr)(void*);
void *gFuncArg;
// Your program's main loop in the main thread
while(programIsRunning())
{
// If we have a function to call this frame, call it, then do the rest of
// our main loop processing
void (*funcPtr)(void*);
void *funcArg;
pthread_mutex_lock(&gMutex);
funcPtr = gFuncPtr;
funcArg = gFuncArg;
gFuncPtr = NULL;
pthread_mutex_unlock(&gMutex);
if(funcPtr != NULL)
(*funcPtr)(funcArg);
// Rest of main loop
...
}
// Call this function from another thread to have the given function called on
// the main thread. Note that this only lets you call ONE function per main
// loop iteration; it is left as an exercise to the reader to let you call as
// many functions as you want. Hint: use a linked list instead of a single
// (function, argument) pair.
void CallFunctionOnMainThread(void (*funcPtr)(void*), void *funcArg)
{
pthread_mutex_lock(&gMutex);
gFuncPtr = funcPtr;
gFuncArg = funcArg;
pthread_mutex_unlock(&gMutex);
}
は、それぞれその代わりpthread_mutex_t
、pthread_mutex_lock
、およびpthread_mutex_unlock
のCRITICAL_SECTION
、EnterCriticalSection
、およびLeaveCriticalSection
を使用し、適切にクリティカルセクションを初期化し、deinitializeすることを忘れないでください。
0
iPhoneの場合は、CFRunLoopAddSource()を使用するか、Objective C++ファイル(拡張子.mm)を使用してperformSelectorOnMainThreadにC++に優しいラッパーを提供できます。私は第二の方法をお勧めします。
プラットフォームが異なる場合は、プラットフォームを指定してください。 Windowsにはそのような手段(APCとメッセージ)があります。
プラットフォームに依存しないスレッドは存在しないため、プラットフォームに依存しない方法はありません。
0
事はUNIXとWindowsの両方で実行する必要があります(あなたがC++を使用している)場合は、私はC++を欠場スレッド&ミューテックス
関連する問題
- 1. 別のスレッドからメインスレッドでメソッドを実行できますか?
- 2. 他のスレッドのメインスレッドでメソッドを実行する
- 3. 他のクラスメソッドからActionListenerメソッドactionPerformedを実行できますか?
- 4. Android、Handlerはメインスレッドまたは他のスレッドで実行されていますか?
- 5. uikitメソッドはメインスレッド上で実行されますか?
- 6. あるスレッドから他のスレッドで実行するメソッドを呼び出す
- 7. 静的メソッドから静的関数ポインタを呼び出す
- 8. クラスメソッドまたは静的変数、違いは何ですか?
- 9. 同じPythonクラスのメソッド、クラスメソッド、静的メソッド
- 10. Python:クラスメソッドでスレッドを実行する
- 11. スレッドでクラスメソッドを実行する(Python)
- 12. FirebaseのsignInWithEmail関数はメインスレッドで実行されますか?
- 13. 静的変数または静的メソッドを実行するためのJava注釈?
- 14. クラスメソッドと静的メソッドのpythonデコレータ?
- 15. 静的メソッドを使用する静的メソッドまたは非静的メソッド
- 16. 他のスレッドのメインスレッドの関数呼び出し?
- 17. 静的メソッドを静的クラスから別のスレッドにアクセスします。それは安全ですか?
- 18. Workerスレッドから静的クラスインスタンスの静的メソッドを呼び出すことはできますか?
- 19. Cの静的関数は他のファイルからもアクセスできます
- 20. 静的でないクラスのスレッドのC#静的メソッドは安全ですか?
- 21. PowerMock、静的メソッドをモックし、他のすべての静的メソッドで実際のメソッドを呼び出す
- 22. ActionPerformedからメソッドを呼び出してメインスレッドでメソッドを実行します
- 23. 静的メソッドから関数を呼び出せません
- 24. Javaのスレッドは、メインスレッドはできない、と呼ばれる二つのスレッドと静的変数
- 25. 静的メソッドからクラスメソッドを呼び出すための「最良の」方法はありますか?
- 26. 既存のインスタンスメソッドまたは静的メソッドのアンドロイド2インスタント実行
- 27. スレッド内の関数の実行または関数内のスレッドの使用
- 28. 静的関数同時実行性ASP.NET
- 29. マルチスレッドプログラムスレッドのクラスの静的メソッドの実行は安全ですか?
- 30. PHPでシャットダウン関数として静的クラスメソッドを登録
ためにブーストを使用しています。私はとても錆びています... – LucasTizma