我现在想实现的是,只能有一个任务可以下载,而其他的任务在等待。然后,当正在下载的任务完成后,下面排队的任务自动开始下载。可是,我现在想不出来有什么好的办法能够让程序自动完成这样的功能。
我觉得要实现这样的情况,需要时刻监听正在下载的任务有没有完成,可是什么可以不停的去监听呢?
我开始想用OnTimer(),可是这样需要要把下载文件的函数放在这里,而下载的整个过程要比Ontimer响应SetTimer()的消息的时间要长很多。这样是不是不可行?
我做的下载的情况,是点击具体的某个文件,然后点击下载。然后初始化一个下载类的对象,在用此对象的下载函数去下载。
因为同一时刻只能有一个任务在下载,而任务的结构体我定义为 taskinfo,包含了一些文件名,文件大小等属性,所以我只需要初始化一个任务,taskinfo newtask。而我负责下载的类的对象为 CDownload downloadtask;然后,调用download.DoDownload(newtask.filename)就可以下载相应的任务。
请问大家根据上面的这些东西,怎么能实现我说的这样的功能。
说的可能比较乱,请谅解,大家多多看看理解一下,我试了半天怎么也实现不了我想要的功能。

解决方案 »

  1.   

    DoDownload这个方法里面应该在下载完成或者出现异常的时候返回一个值吧,根据该值判断,应该没有问题的。
      

  2.   

    对,我下载完成后,会让任务的状态变为“下载完成”
    也就是 newtask.state="下载完成"。然后可以显示在进度对话框中,这些都是在dodownload的函数里实现
      

  3.   

    应该怎么判断,在ontimer里面吗?
      

  4.   

    下载完成,投递一个消息给等候队列,等待队列得到这个消息,开始头第一个新的下载任务。可以自定义消息,或者使用event事件对象都可以
      

  5.   

    ontimer可以。每个轮训,检测下载完成的标志或者自定义消息,如果是,则投递新的下载,如果否,则忽略。时间间隔,大概0。5秒就够了。也不影响系统。最好是用线程来处理任务队列
      

  6.   

    就用OnTimer判断一下就可以了,可以设一个全局变量用于存储DoDownload的返回值,OnTimer中判断该返回值为何值时就开始新的下载任务。
      

  7.   

    还有一个问题,想问问大家,就是如果我在OnTimer的函数里执行的语句需要很长的时间完成,那么结果是等函数执行完再去响应SetTimer的消息,还是不等执行完,只要有SetTimer的消息,就马上执行?
      

  8.   

    只要有Timer消息,就算上一个Timer消息还没有处理完,也会处理新的消息的。
    可以理解为多线程
      

  9.   

    谢谢大家了。解决了,在ontimer中监听有没有下载完成的信息,然后监听到就发下载的消息。