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 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器