【发布时间】:2010-05-03 13:18:07
【问题描述】:
在我的应用程序中有一小部分功能,它会读取文件以获取一些信息,文件数至少为 50,所以我想实现线程。假设用户提供 50 个文件,我想把它分成5 * 10,应该创建5个线程,这样每个线程可以处理10个文件,可以加快处理速度。从下面的代码中你可以看到一些变量是常见的。我读了一些文章关于线程,我知道只有一个线程应该访问我的变量/控制(CCriticalStiuation 可用于此)。对于我作为初学者,我发现很难实现我所学到的关于线程的知识。有人请给我对下面显示的代码有一些想法..在此先感谢
file read function://
void CMyClass::GetWorkFilesInfo(CStringArray& dataFilesArray,CString* dataFilesB,
int* check,DWORD noOfFiles,LPWSTR path)
{
CString cFilePath;
int cIndex =0;
int exceptionInd = 0;
wchar_t** filesForWork = new wchar_t*[noOfFiles];
int tempCheck;
int localIndex =0;
for(int index = 0;index < noOfFiles; index++)
{
tempCheck = *(check + index);
if(tempCheck == NOCHECKBOX)
{
*(filesForWork+cIndex) = new TCHAR[MAX_PATH];
wcscpy(*(filesForWork+cIndex),*(dataFilesB +index));
cIndex++;
}
else//CHECKED or UNCHECKED
{
dataFilesArray.Add(*(dataFilesB+index));
*(check + localIndex) = *(check + index);
localIndex++;
}
}
WorkFiles(&cFilePath,dataFilesArray,filesForWork,
path,
cIndex);
dataFilesArray.Add(cFilePath);
*(check + localIndex) = CHECKED;
}
【问题讨论】:
-
您显示的代码根本没有使用线程。您需要澄清您的问题,以说明您是如何尝试在多个线程之间拆分工作以及出了什么问题。
-
另外,我建议使用
CString而不是原始的wchar_t *和TCHAR *字符串。但是,如果您确实坚持使用指针,请不要将TCHAR *与wchar_t *混合使用——您在if语句中将TCHAR *分配给wchar_t,然后调用wcscpy。这将适用于 Unicode,但如果您需要在某些时候为 ASCII 构建,这将非常失败。保持一致。
标签: multithreading mfc