一个有关调度类的应用实例补充,该程序在屏幕上绘制一条三个周期的正弦曲线,每个周期的绘制由三个独立的时间片控制,因为每个时间片分配的时间相同,所以每个周期的绘制几乎同步进行,这样提高绘制速度,由于绘图方法不佳,所以图形在形成动画时抖动强烈,希望大家多提解决办法的意见和建议,谢谢。
关于调度类(dispatch.h),请参见以下连接(请将效率错误修正) http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=25726&page=1
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #include <dos.h> #include <bios.h> #include <math.h> #include <graphics.h>
#include "dispatch.h"
#define PI 3.14159265
#define inc(T) T/100.0
#define K 240 #define T_COUNT 3
static int x=1,y,A=120,flag=0; static int color=WHITE;
class MyDispatch : public Dispatch { public: MyDispatch(); clock_msg OnClockSliceExecute(unsigned int id,msg_data *d); };
MyDispatch::MyDispatch() { register int i; for(i=0;i<T_COUNT;i++) // Adjust delay time to update or get down the drawing speed AddSlice(50); }
clock_msg MyDispatch::OnClockSliceExecute(unsigned int id,msg_data *d) { register float i;
if(bioskey(1)) { int key=bioskey(0); if(key==0x11b) return msgTurnOff; }
switch(id) { case 1: case 2: case 3: for(i=-PI;i<=PI;i+=inc(T_COUNT)) { y=A*sin(i)+K; putpixel(x,y,color); x++; } if(id==T_COUNT) { if(color==WHITE) { color=BLACK; x=1; } else { color=WHITE; if(flag==0){ if(A>-120) A-=2; else flag=1; } else if(flag==1) { if(A<120) A+=2; else flag=0; } x=1; } } break; } return msgUser; }
int main() { int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, ""); MyDispatch md; md.StartDispatch(); closegraph(); printf("Sin wave, programmed by yuki\n"); printf("Have a nice day, bye bye!\n"); getch(); return 0; }