WEB开发网
开发学院软件开发VC 基于select I/O模型的远程目录浏览与多线程文件下... 阅读

基于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 打开关闭文件的控制

多线程读/写文件是一件很混乱的事, 有点像一堆乞丐抢饭吃那样.所以要有条理就要维护秩序, 要维护秩序, 自然要牺牲性能.每次读/写文件都要定位到该包内容对应原文件的位置.这个应用程序是锁定读/写一个包的时间.如果锁定整个线程, 即等一个线程读/写该线程应该读/写的部分再解锁, 系统性能必会急剧下降, 具体操作可以看"程序流程图"。

上一页  1 2 3 4 5 6 7  下一页

Tags:基于 select 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接