私は幾重にも重い物理計算をする予定のCプロジェクトで作業しています。終了したら結果を見ることができます。現在の動作は、メインスレッドでGLUTを実行し、別のスレッド(pthread)を使用して入力(端末から)と計算を行うことです。私は現在、glutTimerFuncを使ってアニメーションを行っていますが、問題はその関数が何らかの関係でいつもインターバルを発生させるということです。私はアニメーション機能でifステートメントを使用してアニメーションを停止することができますが、変数をupdatetから停止しますが、これは多くの不要なリソースを使用します(私は思っています)。GLUTアニメーションの開始と停止
この問題を解決するために、自分自身を制御できるカスタムタイマー機能を備えた余分なスレッドを使うことができると考えていました(glutMainLoopを使いこなすことなく)。現在、これが機能するかどうかを調べるためのテスト関数です(関数自体は決して終わっていないということです)。それはちょうどglutMainLoop前に別々のスレッドで実行さcreatet:私が持っている
void *threadAnimation() {
while (1) {
if (animationRun) {
rotate = rotate+0.00001;
if (rotate>360) {
rotate = rotate-360;
}
glutSetWindow(window);
glutPostRedisplay();
}
}
}
具体的な問題は、アニメーションがわずか数秒のカップルのために実行した後、停止していることです。誰も私がこれをどのように修正できるか知っていますか?私はタイマなどを後で使用する予定ですが、私が探しているのは、glutPostRedisplayが正しい場所に確実に送信されるようにする方法です。私はtoutt glutSetWindow(ウィンドウ)は解決策でしたが、明らかにそうではありませんでした。もしglutSetWindow(ウィンドウ)を削除しても、アニメーションはまだ機能していますが、長時間ではありませんが、はるかに速く実行されます(glutSetWindow(ウィンドウ)は多量のリソースを必要としますか?)
btw変数 "window" :
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(854, 540);
glutInitWindowPosition(100, 100);
window = glutCreateWindow("Animation View");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
timerInt = pthread_create(&timerThread, NULL, &threadAnimation, NULL);
glutMainLoop();
これが正しいかどうかは実際には分かりませんが、うまくコンパイルされます。どんな助けも大いに魅力的です!ここで