本人系菜鸟一个,,刚接触网络程序。 多线程也只是有个概念,程序写的时候就是想当然,执行的时候问题特多。来求大虾指点迷经,呵呵,分不是问题。
下面是我的程序设计思路:
程序目的: 从网页中读取数据信息。 大概一个页面有几十个数据是我需 要的。方式用CHttpFile得到网页的源码分析得到。刷新这个页面,数据会得到更新。所以只要我不断的请求这个页面就会得到大量的数据,以供我分析。
实现过程:对话框程序。。写了一个线程类,主要想法是利用同一个线程函数(静态的成员函数)根据不同的对象成员变量strURL不同,访问不同的页面。一个页面我又开了5个线程。想加快搜索速度。
(由于线程函数必须写成静态的,那么他就不能访问非静态成员变量,我就把this指针当线程参数传了进来,读取非静态成员变量。)(不知道这么弄会不会有问题,当时没有想出好的办法.)
在对话框代码: CMyThread thread;
thread.StartThread(5, this);
void CMyThread::StartThread(int num, CMyThread * p){
for (int i=0; i<num; i++){
AfxBeginThread(MyThreadFun, (LPVOID)p);
}
}
线程函数 static UINT CMyThread::MyThreadFun(LPVOID lpParam){
CMyThread *pThis = (CSearchThread *)lpParam;
CString strData; //网页源码
CString strBuf;
CInternetSession ise;
CHttpFile* hFile = NULL;
while (!ms_bStop){ //ms_bStop 控制线程结束的
strData = "";
strBuf == "";
strQQNum= "";
num = 0;
try{
hFile = (CHttpFile*)ise.OpenURL(pThis->m_strURL); //刷新网页的到新的数据
if (hFile == NULL){
AfxMessageBox("open error");
return -1;
}
while(hFile->ReadString(strBuf))
{
strData+=strBuf;
}
//下面还有分析html源码,得到我想要的数据,以及将得到数据在对话框显示的程序
......
}catch(CInternetException *e){
char msg[256];
e->GetErrorMessage(msg, 256);
AfxMessageBox(msg);
}
}
delete hFile;
ise.close();
}
以上是这个程序的重要代码段...
出现的问题:
程序得到的数据比较慢,线程都停在hFile = (CHttpFile*)ise.OpenURL(pThis->m_strURL); 这里很长时间,并不是预想的时间能错开.会源源不断地得到数据.
程序运行了一段时间后(大约几分钟,就会有个别线程访问网页异常. 通过对话框返回的错误信息是, 连接的回应信息不可识别,处理超时.这两种错误.(请大虾指点迷经)
程序退出会有错误提示,不知道是不是线程没有结束的原因. 通过bool变量控制线程结束不是很及时.. 要等下面的程序处理完才能结束..有没有其他好的结束线程的方法..程序退出会有错误提示,什么原因呢...RELEASE版就没有了..是不是有内存泄露阿.! 我线程类里面还存有对话框的this指针..会不会这里也有问题.
大家有没有好的线程和程序通信的好方法...通过消息么?
10 个解决方案
#1
呵呵,
无人问津阿。。自顶一下。。
斑竹来帮帮忙了
。。
无人问津阿。。自顶一下。。
斑竹来帮帮忙了
。。
#2
别沉,在顶。。
大家看到的帮顶一下了。。。
问题解决就放分
大家看到的帮顶一下了。。。
问题解决就放分
#3
怎么都米有人看的...5555
#4
帮顶吧。!~
#5
没有来得及看你的程序.
你先把你的程序编译成Release模式的试试.
你先把你的程序编译成Release模式的试试.
#6
写写。。release编译没有了内存错误但感觉肯定有问题~~
现在想要提升一些速度要怎么做。。
还有程序关闭。。线程都没有关闭有问题么?
如何马上关闭安全线程。如果用bool变量是很慢才把所有线程都关了
现在想要提升一些速度要怎么做。。
还有程序关闭。。线程都没有关闭有问题么?
如何马上关闭安全线程。如果用bool变量是很慢才把所有线程都关了
#7
upup
#8
use urldownloadtofile .
#9
楼上,,这个函数怎么更新一个网页
#10
每日一顶
#1
呵呵,
无人问津阿。。自顶一下。。
斑竹来帮帮忙了
。。
无人问津阿。。自顶一下。。
斑竹来帮帮忙了
。。
#2
别沉,在顶。。
大家看到的帮顶一下了。。。
问题解决就放分
大家看到的帮顶一下了。。。
问题解决就放分
#3
怎么都米有人看的...5555
#4
帮顶吧。!~
#5
没有来得及看你的程序.
你先把你的程序编译成Release模式的试试.
你先把你的程序编译成Release模式的试试.
#6
写写。。release编译没有了内存错误但感觉肯定有问题~~
现在想要提升一些速度要怎么做。。
还有程序关闭。。线程都没有关闭有问题么?
如何马上关闭安全线程。如果用bool变量是很慢才把所有线程都关了
现在想要提升一些速度要怎么做。。
还有程序关闭。。线程都没有关闭有问题么?
如何马上关闭安全线程。如果用bool变量是很慢才把所有线程都关了
#7
upup
#8
use urldownloadtofile .
#9
楼上,,这个函数怎么更新一个网页
#10
每日一顶