优秀作品


# 例程2:本例程是一个线程绘图程序,主线程向绘图子线程传递数据,子线程负责播放。


global DataList                  # 全局列表变量用于向线程传递数据

global changeData = 1            # 用于标记当前组数据是否播放结束,1表示当前数据播放结束,需要传递新的数据

global isExit     = 0            # 1表示退出线程


gui = GUI()

gui.HideConsoleWindow()

time = TIME()


def ThreadDrawing()

{

    title       = "绘画"                  # 窗口标题

    size       = [10,3,86,37]             # 窗口尺寸

    list = [title,size]

    num = gui.Fine(list)                  # 创建Fine窗口,并返回资源ID

    while gui.FineClosed(num) != -1       # 检查窗口关闭消息

    {

        PowerDown(3) 


       if changeData == 0

       {

           for i in  DataList              # 遍历列表                   

           {

               drawlist = i                # 取出一个列表项,绘制命令

               gui.Drawing(num,i)          # 绘制

               time.sleep(50)              # 延迟

           } 

           changeData = 1                  # 当前DataList中的数据播放完毕,值changeData = 1申请下一组数据

        }

    }

    isExit = 1             # 程序至此表明子线程创建的窗口已关闭,置标志 isExit = 1,用于控制主线程退出循环

}


# 主线程

drawlist0   = ["CanvasBrush",20,20,640,510,255,0,0]                                  # 自制画布

drawlist1   = ["CanvasImage",20,20,640,510,"exampleRes\\fine5.jpg"]                  # 使用图片作为画布

drawlist2   = ["Text","欢迎你世界!",0,0,"微软雅黑",38,0,255,0]                      # 在图片上绘制文字

drawlist3   = ["Point",40,80,0,0,255]                                                # 画一个蓝色的点

drawlist4   = ["Line",0,0,200,200,0,2,0,0,255]                                       # 画线

drawlist5   = ["Rectangle",200,70,60,80,0,4,0,255,0]                                 # 画矩形,不带填充色

drawlist6   = ["RectangleFill",300,130,100,200,0,4,0,255,0,0,255,0]                  # 画矩形,带填充色

drawlist7   = ["RoundRect",420,70,100,60,1,4,50,30,0,255,0]                          # 画圆角矩形,不带填充色

drawlist8   = ["RoundRectFill",540,120,60,130,3,4,50,30,0,255,0,0,0,255]             # 画圆角矩形,带填充色

drawlist9   = ["Polyline",50,200,60,300,90,250,70,180,0,4,0,255,0]                   # 开放多边形

drawlist10 = ["Polygon",110,200,120,300,150,250,130,180,0,4,0,255,0]                 # 封闭多边形,不填充

drawlist11 = ["PolygonFill",170,200,180,300,210,250,190,180,0,4,0,255,0,0,0,255]     # 开放多边形

drawlist12 = ["Circle",300,270,50,2,4,0,255,0]                                       # 画圆,不填充

drawlist13 = ["CircleFill",420,200,50,0,4,0,255,0,0,0,255]                           # 画圆,填充颜色

drawlist14 = ["Ellipse",90,380,120,100,3,4,0,255,0]                                  # 画椭圆,无填充颜色

drawlist15 = ["EllipseFill",220,380,100,140,3,4,0,255,0,0,0,255]                     # 画椭圆,有填充颜色

drawlist16 = ["Chord",340,400,100,70,30,120,3,4,0,255,0]                             # 画闭合弦,无填充颜色

drawlist17 = ["ChordFill",430,400,100,70,30,120,3,4,0,255,0,0,0,255]                 # 画闭合弦,有填充颜色

drawlist18 = ["Pie",530,400,100,70,30,120,3,4,0,255,0]                               # 画扇形,无填充颜色

drawlist19 = ["PieFill",510,320,70,120,0,120,3,4,0,255,0,0,0,255]                    # 画扇形,有填充颜色

drawlist20 = ["Arc",300,300,400,200,-20,150,3,4,0,255,0]                             # 画弧

drawlist21 = ["AddImage",120,120,100,100,"exampleRes\\fine8.jpg"]                    # 添加图片


# 播放数据列表一(自制画布)

DataList0 = [drawlist0,drawlist2,drawlist3,drawlist4,drawlist5,drawlist6,drawlist7,drawlist8,\

                     drawlist9,drawlist10,drawlist11,drawlist12,drawlist13,drawlist14,drawlist15,drawlist16,\

                     drawlist17,drawlist18,drawlist19,drawlist20,drawlist21]


# 播放数据列表二(图片画布)

DataList1 = [drawlist1,drawlist2,drawlist3,drawlist4,drawlist5,drawlist6,drawlist7,drawlist8,\

                     drawlist9,drawlist10,drawlist11,drawlist12,drawlist13,drawlist14,drawlist15,drawlist16,\

                     drawlist17,drawlist18,drawlist19,drawlist20,drawlist21]



thread = THREAD()                               # 定义一个线程变量

thread = thread.CreateThread(ThreadDrawing)     # 默认新创建的线程处于悬挂状态,不会执行 

thread.start()                                  # 线程的start()方法,将启动当前thread线程运行


                       

next = True                             # 初始化,控制播放内容切换


while True

{

    PowerDown(3) 

    if isExit == 1 {break}              # 检查子线程ThreadDrawing是否退出,如果退出,跳出主循环,结束程序

    

    if changeData == 1                  # 检查是否需要提交下一组数据

    {

        if next                         # 根据next的值来确定提交哪一组数据

        {

            DataList = DataList0        # next为True,提交第一组数据

            changeData = 0              # 数据提交后,允许播放

            next = not next             # 对变量next取反,控制交替播放DataList0和DataList1的内容

        }

        else

        {

            DataList = DataList1        # next为False,提交第二组数据

            changeData = 0              # 数据提交后,允许播放

            next = not next             # 对变量next取反,控制交替播放DataList0和DataList1的内容

        }

    }

}

0