不就是Telepro或者WebZip吗?为什么需要做成课题.选题不当,不当!这样看:
首先模块化你的"可以得到该网页的HTML源文件,根据此文件进行该站点的深度爬行,找到底层文件,然后对得到的文件进行一系列的处理......"部分
然后把它当作线程体.
对话框接收到url之后,启动一个新线程,传递url给线程,执行上面的那部分线程体.
首先模块化你的"可以得到该网页的HTML源文件,根据此文件进行该站点的深度爬行,找到底层文件,然后对得到的文件进行一系列的处理......"部分
然后把它当作线程体.
对话框接收到url之后,启动一个新线程,传递url给线程,执行上面的那部分线程体.
{
// 检查线程是否已经存在
if(m_pThread101d!=NULL){ AfxMessageBox("101d线程已经启动...\r\n请先停止101d服务",MB_OK);
return;
}
m_pThread101d=AfxBeginThread(func101d,(LPVOID)this);
// 检查线程是否成功启动
if(m_pThread101d==NULL)
AfxMessageBox("101d线程启动失败...\r\n请咨询系统管理员或重新启动",MB_OK);
else{
CString lsStr,lsStrAdd;
CConView* pEditView;
CWinApp *app = AfxGetApp();
CMainFrame* pframe = (CMainFrame*)app->m_pMainWnd;
ASSERT(pframe);
pEditView = pframe->m_pConView;
CEdit& theEdit = pEditView->GetEditCtrl();
theEdit.GetWindowText(lsStr); lsStrAdd.Format("\r\n\t\t101d线程启动成功...\r\n=======================================================================\r\n");
lsStr+=lsStrAdd;
theEdit.SetWindowText(lsStr);
glPos=theEdit.GetLineCount();
theEdit.LineScroll(glPos,0);
if(giPocessingProc==0){
pframe->m_pDoc=(CMsaDaemonDoc*)GetDocument();
pframe->m_pDoc->SetTitle("Daemon running...");
}
giPocessingProc++;
}
} //此乃启动线程!UINT func201d(LPVOID pParam)
{
你的深度搜索代码
}//此乃线程函数int CMsaDaemonView::onStop_101d()
{
DWORD ThreadExitCode = 0;
int count = 0;
if(m_pThread101d!=NULL)
{
PostThreadMessage(m_pThread101d->m_nThreadID,MSG_EXITTHREAD,0L,0L);
do{
Sleep(100);
GetExitCodeThread(m_pThread101d->m_hThread,&ThreadExitCode);
count++;
}while(ThreadExitCode == STILL_ACTIVE && count<50);
CString lsStr,lsStrAdd;
CConView* pEditView;
CWinApp *app = AfxGetApp();
CMainFrame* pframe = (CMainFrame*)app->m_pMainWnd;
ASSERT(pframe);
pEditView = pframe->m_pConView;
CEdit& theEdit = pEditView->GetEditCtrl();
if(ThreadExitCode!=STILL_ACTIVE)
{
m_pThread101d = NULL;
AfxMessageBox("线程101d停止成功!");
theEdit.GetWindowText(lsStr); lsStrAdd.Format("\r\n\t\t线程101d停止成功!\r\n===================================================================\r\n");
lsStr+=lsStrAdd;
theEdit.SetWindowText(lsStr);
glPos=theEdit.GetLineCount();
theEdit.LineScroll(glPos,0);
giPocessingProc--;
if(giPocessingProc==0){
pframe->m_pDoc=(CMsaDaemonDoc*)GetDocument();
pframe->m_pDoc->SetTitle("Daemon stopping...");
}
return 1;
}
else
{
AfxMessageBox("线程101d停止失败!");
theEdit.GetWindowText(lsStr); lsStrAdd.Format("\r\n\t\t线程101d停止失败!\r\n");
lsStr+=lsStrAdd;
theEdit.SetWindowText(lsStr);
glPos=theEdit.GetLineCount();
theEdit.LineScroll(glPos,0);
return 0;
}
}
else
{
AfxMessageBox("线程101d并没有启动!");
return 0;
}
} //此乃停止线程函数看看吧,比较容易明白的。