我想用多个线程加密文件,以减少花费的时间。即时运行在英特尔i5处理器,4 GB的内存,visual c + + 2008年。问题是,当我在调试模式下运行下面的代码(Visual C++ 2008),所用的时间更长,例如,如果我使用一个线程加密3 MB文件,花费的时间是5秒,但是当我使用两个线程时,花费的时间是10秒。在调试模式下使用2个线程时,时间应该很短。但在发布模式下,没有任何问题,使用多线程的时间很短。 是否可以在更短的时间内以调试模式运行代码? visual C++ 2008中有没有设置改变?如何使用C++窗口线程
void load()
{
ifstream readF ("3mb.txt");
string output; string out;
if(readF.is_open())
{
while(!readF.eof())
{
getline(readF,out);
output=output+'\n'+out;
}
readF.close();
//cout<<output<<endl;
//cout<<output.size()<<endl;
text[0]=output;
}
else
cout<<"couldnt open file!"<<endl;
}
unsigned Counter;
unsigned __stdcall SecondThreadFunc(void* pArguments)
{
cout<<"encrypting..."<<endl;
Enc(text[0]);
_endthreadex(0);
return 0;
}
unsigned __stdcall SecondThreadFunc2(void* pArguments)
{
cout<<"encrypting..."<<endl;
//Enc(text[0]);
_endthreadex(0);
return 0;
}
int main()
{
load();
HANDLE hThread[10];
unsigned threadID;
time_t start, end;
start =time(0);
hThread[0] = (HANDLE)_beginthreadex(NULL, 0, &SecondThreadFunc, NULL, 0, &threadID);
hThread[1] = (HANDLE)_beginthreadex(NULL, 0, &SecondThreadFunc2, NULL, 0, &threadID);
WaitForSingleObject(hThread[0], INFINITE);
WaitForSingleObject(hThread[1], INFINITE);
CloseHandle(hThread[0]);
end=time(0);
cout<<"Time taken : "<<difftime(end, start) << "second(s)" << endl;
system("pause");
}
当您将数据加载到数据块时,某些加密算法将加密单个数据块以生成另一个块。但要小心,因为某些算法会加密第二个数据块以产生不同的数据,这取决于第一个数据块中的数据。这种类型的加密算法实际上并不是多线程的,因为它依赖于串行通过数据。 – 2012-02-04 15:53:30