我只开一个单线程来实现下载,网址很多,我想下完一个接着下另一个。这样就涉及到 第一个下载完成以后(线程结束),怎样重新启动这个线程来下第二个。(直到所有的网址下完,线程结束,整个过程是自动的),请问怎么处理?谢谢

解决方案 »

  1.   

    那就在另一个线程中监控下载线程,下载线程退出后,重新启动.
    WaitForSingleObject(下载线程handle);
      

  2.   

    dengzikun 兄弟能在详细点吗,我是C新手,最好能简单给一些代码,关键是:“下载线程退出后,怎样重新启动.
      

  3.   

    下载线程退出后,可以用CreateThread之类的函数重新创建,把新的下载参数传进去.
      

  4.   


    看一下事件CEvent就知道了,下载线程结束的时候通知主线程,主线程接到通知后判断是否还有网址,有网址就再启动下载线程呗。给你粘一点事件的资料:
     在头文件中定义事件CEvent ThreadBegin,这样创建的时间默认是自动事件,事件被创建后就自动处于非信号态,要使用它处于信息态,必须使用对件对象的成员函数SetEvent(),即: 
    ThreadBegin.SetEvent();
    设置ThreadBegin为有信号状态后,怎样知道它已经有信号了呢?这个任务通过WaitForSingleObject(ThreadBegin.m_hObject,INFINITE)来完成,当ThreadBegin有信号时,WaitForSingleObject返回值为WAIT_OBJECT_0,通过这个返回值就知道事件有信号了,线程不用再等待了,继续执行下面的语句。
         等待函数的第二个参数可以设置为INFINITE,比如当启动一个子线程时,可以设置为这个值,如果执行子线程的时机未到,则子线程就一直等待,直到主线程将启动子线程的事件设置为有信号状态了,子线程才能够不再挂起,继续执行下面的语句。
    第二个参数也可以设置为0值,如果子线程中需要不断地循环,直到进程结束,因为进程结束之前需要通知子线程结束循环,也就是结束子线程,可以通过将等待函数的第二个参数设为0来结束循环。进程结束的时候,使事件变为有信号状态,循环捕捉到这个信息即停止循环。
    第二个参数也可以设为其他时间值,如1000,2000等。
    可以通过WaitForSingleObject函数来间隔的执行一个线程函数的函数体
        UINT CFlushDlg::MyThreadProc( LPVOID pParam )
    {
        while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)
        {
            ………………
        }
        return 0;
    }
    在这个线程函数中可以可以通过设置MT_INTERVAL来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了。