私のマルチスレッド アプリケーションでは、sleep() 関数 (GLFW ライブラリのもの) を使用しています。
glfwSleep(..);
私のコールスタックが示すように、それは明らかに私のアプリケーションをセグメンテーション違反に導きます:
#0 76CFC2BC WaitForSingleObjectEx() (C:\Windows\system32\kernel32.dll:??)
#1 00000016 ??() (??:??)
#2 0000006C ??() (??:??)
#3 00000000 ??() (??:??)
はglfwSleep()
スレッド内で使用されます。それは危険ですか?その結果、プログラムがセグメンテーション違反になるのはなぜですか?
編集:
のパラメータglfwSleep()
が < 0.02 (秒) の場合、segfault は発生しません!
編集2:
GLFW の公式ドキュメントから:
スレッド化されたアプリケーションの作成は、慣れるまでは非常に厄介かもしれませんが、いくつかの重要なルールに従うのは非常に簡単です。
- スレッド間で共有されるデータへの排他的アクセスを常に保証してください!
- スレッドが適切に同期されていることを確認してください!
- 決して忙しく待つことはありません!
私は答えを得たと思います..今すぐ代替案を見つけなければなりません..
ありがとう!