我做了一个小的下载程序,但程序执行效率似乎很低,最明显的就是,在下载时这个程序就像“死机”一样,什么也干不成了。当下载完成后,程序才“缓过劲儿”来,恢复“活力”。
并且我目前程序的下载功能,还不能中断当前正在进行的下载,如果用户点了下载,就必须直到它下载完成后才能关闭。别人说必须用多线程,虽然这个词也经常听到,但具体还是不明白它的意思。
以及在我的程序里要怎样用多线程技术呢?对我现有程序的改动大不大?
各位能否讲讲呢,或者举个例程。

解决方案 »

  1.   

    你的程序本身有一个消息循环,用于负责界面的刷新,你拖动界面等所有事情,但是如果其中有一个过程要耗费大量时间的话,消息循环就一直没有机会被运行到(或运行到的周期很长),所以你的程序看起来反应很慢,遇到这种情况一是手动让程序一定间隔内执行一次消息循环,如Application.ProcessMessages,另一种方法就是使用线程,由于线程的执行是独立的,(可以把主程序看作是一个不断处理消息的线程,它的主代码其实只有三句:PeekMessage(),TranslateMessage(),DispatchMessage()),这样就可以避免主程序反应慢了,但是线程与主程序之间的同步,以及线程之间的同步,资源共享都是你必须注意的问题,
      

  2.   

    不是没人说话,而是你这个问题的话题太大,要介绍多线程不是一句两句可以说清楚的。简要介绍也没什么意义。
      到www.google.com上搜索'delphi 多线程',会有一堆一堆的技术文章
      

  3.   

    补充,可以试着用sdk写一个windows应用程序,了解主线程的消息循环是怎么回事,然后看一下《Win32多线程程序设计》侯捷
      

  4.   

    你应该看操作系统的书,比如《WINDOWS操作系统原理》,
    WINDOWS的多任务其实就是吧CPU分成时间片,宏观的看就是多任务,微观的是分时处理,当伦到一个程序的时候这个正在执行的程序是一个程序进程,一个程序至少有一个进程和一个现成。
    当然你也可以再吧这一个进程中再分成多个时间片,这就是多线程了。如下图
    外筐是进程,内筐是线程
    图1 单进程单线程           图2单进程多线程
    |------------------|   |-----------------------|
    ||---------------| |   | |---||---||---||---|  |
    ||               | |   | | 线|| 线|| 线|| 线|  |
    ||    单进程     | |   | | 程|| 程|| 程|| 程 |  |
    ||    单线程     | |   | |   ||   ||   ||   |  |
    ||               | |   | |   ||   ||   ||   |  |
    ||               | |   | |   ||   ||   ||   |  |
    ||---------------| |   | |---||---||---||---|  |
    |------------------|   |-----------------------|
    上图2 中有4个线程轮流执行,有负责界面的,有负责执行功能任务的,
    而图1只有一个进程和一个线程,所以当你执行任务的时候,界面就有“假死现象”
      

  5.   

    另外这本书哪里有下载的?《Win32多线程程序设计》侯捷