怎么用多线程实现呢?
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只能接受无参数的函数呀?
怎么实现呢?谢谢!