Python论坛  - 讨论区

标题:[python-chinese] 如何做到多线程的刷新

2005年09月07日 星期三 17:24

Qiangning Hong hongqn at gmail.com
Wed Sep 7 17:24:11 HKT 2005

Bazaari wrote:
> Hi,List
> 一个很久的疑惑想请教大家。
> 
> *******************************************问题状况***************************************
> 在主界面上点击一个“按钮”后,开始进行网络通信(收取邮箱中邮件),
> 通信过程大约3分钟,每收一封邮件就刷新一下界面中的列表显示。
> 在通信过程中想可以进行别的操作,认为需要多线程的支持。
> *******************************************问题*******************************************
> 如何把通信过程和刷新界面上的列表显示的动作放到多线程里头来进行呢?
> 同时在“按钮”按下后,按钮变为灰色(非使能),待通信过程结束,按钮可以使能。
> 	

通信过程放在一个线程里,称为工作线程。所有界面操作均在主线程中完成。线程
间需要使用某种同步机制进行同步,wxPython提供了一个wx.CallAfter函数,很方便。

def on_recv_btn(evt):
    recv_btn.Disable()
    t = threading.Thread(target=get_mail)
    t.setDaemon(1)
    t.start()

def get_mail():
    # this function is running in a seperate thread.
    while 1:
        mail = get_new_mail()
        if not mail:
            break
        wx.CallAfter(update_view, mail)
    wx.CallAfter(recv_btn.Enable)

limodou的blog archive里有更详细讨论,你可以去看看。

-- 
Qiangning Hong
http://www.hn.org/hongqn (RSS: http://feeds.feedburner.com/hongqn)

Registered Linux User #396996
Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id;=67907&t;=1>
Thunderbird! <http://www.spreadfirefox.com/?q=affiliates&id;=67907&t;=183>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号