我在一个网页中,用循环提取了10个链接,然后翻页,再提取十个链接,因为耗时很长,为了能随时终止程序,就创建一个子线程来挨个处理提取到的这十个链接,问题是当子线程处理链接的时候,那么主线程还会继续进行啊,万一子线程没处理完那个链接,这个主线程还会创建子线程处理链接吧,问题是我用同一个对象在子线程中处理提取的链接。
我不知道这样实现行不行,也许我思路有点混乱,大家给点意见吧。我该怎么实现呢?
我不知道这样实现行不行,也许我思路有点混乱,大家给点意见吧。我该怎么实现呢?
int main()
{
HANDLE hThread;
unsigned threadID; printf( "Creating second thread...\n" ); // Create the second thread.
hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, NULL, 0, &threadID ); // Wait until second thread terminates. If you comment out the line
// below, Counter will not be correct because the thread has not
// terminated, and Counter most likely has not been incremented to
// 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
printf( "Counter should be 1000000; it is-> %d\n", Counter );
// Destroy the thread object.
CloseHandle( hThread );
}
我发现我们的类中有个表示线程句柄的成员变量
WaitForSingleObject(m_net.m_hThread,INFINITE);
可是编译后,错误error C2664: 'WaitForSingleObject' : cannot convert parameter 1 from 'unsigned long' to 'void *'
我修改了一下,发现这样好了,我先留着,估计带回还会有问题,到时再请教大家吧
WaitForSingleObject((HANDLE)m_net.m_hThread,INFINITE);
改成
WaitForSingleObject((HANDLE)m_net.m_hThread,200); //等待200毫秒
每次等待200毫秒之后,
如果time out,则表明线程还在执行;
其他表示线程结束了或者一些错误,请参考msdn然后想个办法定期执行WaitForSingleObject
主要就是提取超链接,和处理超链接的问题开三个线程
1主线程 显示状态,接受停止命令等
2子线程 获取链接,保存到CStringList ,翻页,提取... ...3子线程 获取CStringList 的 第一项url,处理,处理完,删除第一项, 继续获取... ...建议一个线程一个类