首先感谢 flag 和 AIKO_sex 的回复。
可能是我没有描述清楚。程序的功能就是不停的以各种方式(逐行上滚、左移、右移等)在屏幕上显示文字和图片,同时每隔几秒钟检测并设置一些硬件参数,我分了两个线程,主线程用来显示(为方便描述,我称为显示线程),另外一个线程用来每隔几秒钟检测并设置硬件参数(为方便描述,我称为检测线程),检测线程用setitimer(ITIMER_REAL, &itv, &oldtv)和signal(SIGALRM, Contrl)实现每隔几秒钟检测并设置,因为程序的目的就是显示和检测,所以两个线程我都用了死循环while(1){};来实现。
现在我的问题是,如果只有显示线程,那么显示得很流畅,如果把检测线程加上的话,显示线程的显示就有明显的停顿,而且停顿不均匀,我以为检测线程有阻塞函数导致整个进程的阻塞而引起停顿,就把检测线程里所有代码注释掉,只留下一个空的死循环,还是有不均匀的停顿,但是如果在检测线程的空的死循环里加入一条printf,顺便循环输出几个字母后,显示线程的显示就没有了停顿,很流畅了。请问是什么原因呢,跟线程的属性有关吗,请各位兄弟继续指点,谢谢!
补充一下:显示线程的效果就类似有些城市的广场上的大屏显示广告时的效果,只不过我的比较简单,常见的就是一行文字和图片混排的内容从屏幕的右边慢慢移动到左边,我们称这种方式为左移,停留一段时间后再更换内容再从屏幕右边移动到左边,如此循环,直到手动关闭程序。因为程序的目的就是显示这些内容,所以程序不会主动退出,除非出错,所以用死循环,只能手动关闭。
[ 本帖最后由 alldying 于 2007-9-14 14:44 编辑 ]