我只开一个单线程来实现下载,网址很多,我想下完一个接着下另一个。这样就涉及到 第一个下载完成以后(线程结束),怎样重新启动这个线程来下第二个。(直到所有的网址下完,线程结束,整个过程是自动的),请问怎么处理?谢谢
解决方案 »
- 同时显示几个对话框做数据演示 请各位师兄师姐多多指教!
- 按钮上的某一点,取出父窗口上对应此点的颜色值,该怎么做?
- TCP网络连接过多断开问题
- 我知道每个硬盘分区都有一个序列号,请问专家这个序列号什么时候产生,什么时候变化?50分!
- 为什么我将_variant_t类型变量的赋给doube型变量后得到的不是我想要的值,而是一个其他的数字?
- 我实现了MSN6.0中聊天窗口的透明效果,与大家共享,绝对原创,主要的实现思想如下:
- 如果要实现实体间的布尔运算,什么方法最简单?
- 怎么实现换肤效果
- 提问:怎样使工具条一开始时就是浮动的?
- 在对话框上显示文字。鼠标移动上去过后。文字会被擦除
- 如何检测网页播放器的打开
- 文档对象模型问题
WaitForSingleObject(下载线程handle);
”
看一下事件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执行一次,当设置事件为有信号状态时,线程就执行完毕了。