怎么用多线程实现呢?

heimi 2004-08-19 12:17:20
下面是一个搜索满足扩展名的函数
void FindFile(const AnsiString subpath, TListView *ResultListView,AnsiString Ext)
{ TListItem *pItem; // 用于添加满足条件的项到 ResultListView
TSearchRec sr;
AnsiString path=subpath;
AnsiString fullPath=path+"*.*";
if(FindFirst(fullPath,faAnyFile,sr)==0)
{
AnsiString ls_filename=path+sr.Name;
if(sr.Attr!=faDirectory)
{
if (ExtractFileExt(sr.Name).LowerCase()==Ext)
{
pItem=ResultListView->Items->Add();
pItem->Caption=ls_filename;
}
}
else if(AnsiString(sr.Name)!="." && AnsiString(sr.Name)!="..")
{
FindFile(ls_filename + "\\", ResultListView,Ext);
}
}
while(FindNext(sr)==0)
{
AnsiString ls_filename=path+sr.Name;
if(sr.Attr!=faDirectory)
{
if (ExtractFileExt(sr.Name).LowerCase()==Ext)
{
pItem=ResultListView->Items->Add();
pItem->Caption=ls_filename;
}
}
else if(AnsiString(sr.Name)!="." && AnsiString(sr.Name)!="..")
{
FindFile(ls_filename + "\\", ResultListView,Ext);
}
}
FindClose(sr);

}
现在的一个问题是:怎么用多线程实现搜索呢?比如说:我如果这样写肯定是很慢的!
void FindFile(“c:\\”, TListView *ResultListView,“doc”)
void FindFile("c:\\", TListView *ResultListView,"bmp")
我知道,对VCL的访问只能是互斥的进行。但是Synchronize只能接受无参数的函数呀?
怎么实现呢?谢谢!
...全文
240 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy1080 2004-08-19
  • 打赏
  • 举报
回复
你的函数改的好象有问题,先下了.
我不懂电脑 2004-08-19
  • 打赏
  • 举报
回复
参数可以用全局变量或类变量代替呀。
hy1080 2004-08-19
  • 打赏
  • 举报
回复
可以把参数传到线程里阿,
偶试试再线你回吧,
sczyq 2004-08-19
  • 打赏
  • 举报
回复
在线程里给TListView加内容会有问题!
l_clove 2004-08-19
  • 打赏
  • 举报
回复
多线程互斥访问?和单线程没太大区别吧?
jiangchun_xn 2004-08-19
  • 打赏
  • 举报
回复
问一下:多线程是不是快了?
hy1080 2004-08-19
  • 打赏
  • 举报
回复
才发现上午回的没帖上去,再发一次
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "FinFunc.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

__fastcall FinFile::FinFile(bool CreateSuspended,AnsiString subpath,
TListView *ResultListView,AnsiString Ext) : TThread(CreateSuspended)
{
Path = subpath;
List = ResultListView;
ExtName = Ext;
}
//---------------------------------------------------------------------------
void __fastcall FinFile::Execute()
{
FindFile(Path,List,ExtName);
}

class FinFile : public TThread
{
private:
protected:
void __fastcall Execute();
AnsiString Path;
TListView *List;
AnsiString ExtName;
public:
__fastcall FinFile(bool CreateSuspended,AnsiString subpath, TListView *ResultListView,AnsiString Ext);
};

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧