qq_34936281 2017-05-16 12:40 采纳率: 0%
浏览 1258
已结题

python 多线程,求助!!!

请大家帮忙看一下下面的程序,感谢!
#encoding=utf-8

import threading
import time

import pygame
from pygame.locals import *
from sys import exit

def test():
global even_text
while True:
event = pygame.event.wait()
event_text.append(str(event))
#获得时间的名称
event_text = event_text[-SCREEN_SIZE[1]/font_height:]
#这个切片操作保证了event_text里面只保留一个屏幕的文字

    if event.type == QUIT:
        exit()

    screen.fill((255, 255, 255))

    y = SCREEN_SIZE[1]-font_height
    #找一个合适的起笔位置,最下面开始但是要留一行的空
    for text in reversed(event_text):
        screen.blit( font.render(text, True, (0, 0, 0)), (0, y) )
        #以后会讲
        y-=font_height
        #把笔提一行

    pygame.display.update()

class MyThread(threading.Thread):
def init(self,arg):
super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
self.arg=arg
def run(self):#定义每个线程要运行的函数
time.sleep(1)
test()
print 'the arg is:%s\r' % self.arg

pygame.init()
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
font_height = font.get_linesize()
event_text = []

t =MyThread(1)
t.start()

print 'main thread end!'

我想运行pygame部分的时候另外开一个线程(为了可以在控制台打印一些信息,如果不另外开线程或者进程的话我不知道怎么才可以在显示pygame的窗口的时候在控制台输入输出信息,求大神指教)。pygame部分(函数test())输出的是触发的时间信息。
但是如果我像上面这样写,只要鼠标点到pygame窗口就会卡死,但是控制台正常。

如果我把程序改成如下这样(把pygame 的init换到新开的线程里进行),就运行正常,我想知道为什么,请大神指教!
#encoding=utf-8

import threading
import time

import pygame
from pygame.locals import *
from sys import exit

def test():
pygame.init()
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)

font = pygame.font.SysFont("arial", 16)
font_height = font.get_linesize()
event_text=[]
while True:

    event = pygame.event.wait()
    event_text.append(str(event))
    #获得时间的名称
    event_text = event_text[-SCREEN_SIZE[1]/font_height:]
    #这个切片操作保证了event_text里面只保留一个屏幕的文字

    if event.type == QUIT:
        exit()

    screen.fill((255, 255, 255))

    y = SCREEN_SIZE[1]-font_height
    #找一个合适的起笔位置,最下面开始但是要留一行的空
    for text in reversed(event_text):
        screen.blit( font.render(text, True, (0, 0, 0)), (0, y) )
        #以后会讲
        y-=font_height
        #把笔提一行

    pygame.display.update()

class MyThread(threading.Thread):
def init(self,arg):
super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
self.arg=arg
def run(self):#定义每个线程要运行的函数
time.sleep(1)
test()
print 'the arg is:%s\r' % self.arg

t =MyThread(1)
t.start()

print 'main thread end!'

  • 写回答

1条回答 默认 最新

  • 小邓在路上 2017-05-17 07:04
    关注

    你能不能把你的代码搞得整齐一点,文本框中输入代码的时候选择插入代码片段 我好好看一下

    评论

报告相同问题?

悬赏问题

  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键