0

だから、私はこのプログラムを、それぞれの描画の間に遅らせようとしています。Sleep() を使用してみましたが、draw() 関数で使用するとエラーが発生し、他の場所で使用すると効果がありません。

Xcode はファイルをコンパイルしますが、実行中に次のエラーが表示されます。

libsystem_kernel.dylib`__semwait_signal:
0x7fff8fd7937c:  movl   $33554766, %eax
0x7fff8fd79381:  movq   %rcx, %r10
0x7fff8fd79384:  syscall
0x7fff8fd79386:  jae    0x7fff8fd7938d            ; __semwait_signal + 17
0x7fff8fd79388:  jmpq   0x7fff8fd7a4c8            ; cerror
0x7fff8fd7938d:  ret    
0x7fff8fd7938e:  nop    
0x7fff8fd7938f:  nop  

コード:

void draw()
{
GLint width;

glClear(GL_COLOR_BUFFER_BIT);
glPointSize(10);

int x=0; int y=0;
glBegin(GL_POINTS);


for(x=0; x<500; x++)
{
    for(y=0;y<500; y++)
    {
        glColor3f(rand()%255,rand()%255, rand()%255);
        glVertex2i(rand()%500,rand()%500);
    }
}
sleep(500);
glEnd();
glFlush();
}


int main(int argc, char** argv){


glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Trabalho de Modelagem e Simulação de Processos");


glutDisplayFunc(draw);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
gluOrtho2D (0.0f, 500.0f, 0.0f, 500.0f);
glutIdleFunc(draw);
glutMainLoop();
return 1;

}

4

1 に答える 1

1

差し迫った問題が解決しない場合でも、プログラムの再構築を検討する必要があります。まず、アイドル コールバックからではなく、GLUT に登録したディスプレイ コールバックからのみ OpenGL 呼び出しを行う必要があります。つまりdraw、アイドル関数として登録しないでください。glutPostRedisplay代わりに、またはglutPostRedisplayそれ自体をアイドル関数として呼び出す専用関数を登録する必要があります。あらゆる種類の長期遅延 (長期とは 10 ミリ秒を超えるものを意味します) は、タイマーを使用して実装し、プログラムが対話型のままであるようにする必要があります。

于 2013-06-20T09:24:26.860 に答える