基于select I/O模型的远程目录浏览与多线程文件下载
2007-03-17 22:00:56 来源:WEB开发网核心提示: 山重水复, 得找出路才有柳暗花明, 转转思维, 用另一种做法吧,基于select I/O模型的远程目录浏览与多线程文件下载(3),在Windows中, 文件名是不能含有 "|,<,>,%...." 等特殊字符的.由于恰好要传的内容为目录字符串数组, 所以把字
山重水复, 得找出路才有柳暗花明。 转转思维, 用另一种做法吧。在Windows中, 文件名是不能含有 "|,<,>,%...." 等特殊字符的.由于恰好要传的内容为目录字符串数组, 所以把字条串数组转为字符数组, 每个字符串用一个特殊字符隔开就OK了。
3. 确保连续创建线程正确性
用循环语句创建线程, 如果没有一定的保护机制, 肯定会出事。程序如:
int i = paramSettingDlg.thrTotal //abtain download threads total
for( int j=1;j<=i;j++ )
{
dataPacket.length=j*100+i; // download thread information.
::CreateThread(NULL, 0, ThreadDownload, (LPVOID)&dataPacket, 0, 0);
}
i为下载线程的总数, j为当前线程序号.主线程循环不管CreateThread创建成功与否还继续执行, 当真正CreateThread在创建线程时, j的值可能已经被修改了.程序修改如下:
for( int j=1;j<=i;j++ )
{
dataPacket.length=j*100+i; // download thread information.
while( ::CreateThread(NULL, 0, ThreadDownload, (LPVOID)&dataPacket, 0, 0) ==0 )
Sleep(30);
}
在本项目中, 用的是置位机制.线程创建成功, 由线程置位为1, 主线程睡眼等待, 检测到位为1时, 则置位为0并继续创建线程.
4 打开关闭文件的控制
多线程读/写文件是一件很混乱的事, 有点像一堆乞丐抢饭吃那样.所以要有条理就要维护秩序, 要维护秩序, 自然要牺牲性能.每次读/写文件都要定位到该包内容对应原文件的位置.这个应用程序是锁定读/写一个包的时间.如果锁定整个线程, 即等一个线程读/写该线程应该读/写的部分再解锁, 系统性能必会急剧下降, 具体操作可以看"程序流程图"。
- ››基于IP地址的vsftp服务器
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››基于Windows Azure的云计算应用设计
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
- ››基于SolidWarks齿轮机构的运动分析与仿真
- ››基于Windwos Server 2008故障转移群
- ››基于JavaScript的REST客户端框架
- ››基于JavaScript和CSS的Web图表框架横向对比
更多精彩
赞助商链接