画面会闪烁
是因为你在一次画出时
做了不只一次的画面刷新动作 (glutSwapBuffers)
你的initView
最后面有个glutSwapBuffers
而你的check_data
一开始先呼叫了initView
就已经更新了一次画面
后面画了东西之后
又呼叫一次glutSwapBuffers
所以画面会闪就是这个原因
我的建议是这样的
把glutSwapBuffers从initView抽出
移动到display的后方
但是整个程式的运作逻辑需要改善
现在这样设计简直就像面线团一样纠缠
你一方面用glutTimeFunc定时重画
但是check data里面又呼叫glutPostRedisplay
这是让display函数在下次的mainloop会被呼叫
你这样子非常难确定到底是mainloop呼叫display在重画
还是glutTimeFunc的呼叫造成重画
何不这样设计?
把画东西的逻辑都只放在display中
然后就只有一个地方有swap buffer
display里面根据flag决定什么要画、什么略过不画
至于要画什么功能可以抽出成为易懂的函数
让display负责呼叫画出与管理buffer的控制
glutPostRedisplay就放在display底端
让电脑能画多快就多快
display里面自己抓两次画出的时间差来决定更新量
不需要用到glutTimerFunc
这样画出的动作就只有一个循环负责在做
不需要弄两个循环平行跑来制造混乱