소요 시간을 줄이기 위해 여러 스레드로 파일을 암호화하고 싶습니다. 인텔 i5 프로세서, 4 GB 메모리, Visual C++ 2008에서 실행되는 문제입니다. 디버그 모드 (Visual C++ 2008) 아래에서 코드를 실행할 때 문제가 발생합니다. 예를 들어, 한 스레드를 사용하여 3MB 파일을 암호화하면 시간이 오래 걸립니다. 찍은 시간은 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");
}
데이터 블록에 데이터가 잘린 경우 일부 암호화 알고리즘은 개별 블록의 데이터를 암호화하여 다른 블록을 생성합니다. 그러나 일부 알고리즘은 첫 번째 블록에있는 데이터에 따라 다른 데이터를 생성하기 위해 두 번째 데이터 블록을 암호화하므로주의해야합니다. 이러한 유형의 암호화 알고리즘은 데이터를 순차적으로 처리하는 데 의존하기 때문에 실제로는 다중 스레드 될 수 없습니다. –