From 26f425f0153de537bc676c9c38a68ef3edd882c5 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Fri, 27 Aug 2010 00:00:01 +0300 Subject: using threads, gpg execution timeout, fixed high cpu usage when waiting gpg process --- gpg_wrapper.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'gpg_wrapper.cpp') diff --git a/gpg_wrapper.cpp b/gpg_wrapper.cpp index f9f4207..5bcf548 100644 --- a/gpg_wrapper.cpp +++ b/gpg_wrapper.cpp @@ -18,7 +18,8 @@ //thx gpg module from Harald Treder, Zakhar V. Bardymov -pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD aexitcode) + +pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD aexitcode, pxResult *result) { extern bool bDebugLog; extern fstream debuglog; @@ -38,6 +39,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD if(errno == ENOENT) { mir_free(bin_path); + *result = pxNotFound; return pxNotFound; } } @@ -52,6 +54,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD success=CreatePipe(&newstdin,&writestdin,&sattrs,0); if (!success) { + *result = pxCreatePipeFailed; return pxCreatePipeFailed; } @@ -60,6 +63,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD { CloseHandle(newstdin); CloseHandle(writestdin); + *result = pxCreatePipeFailed; return pxCreatePipeFailed; } @@ -104,6 +108,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD CloseHandle(writestdin); CloseHandle(newstdout); CloseHandle(readstdout); + *result = pxCreateProcessFailed; return pxCreateProcessFailed; } @@ -122,6 +127,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD success=WriteFile(writestdin,inputpos,size,&transfered,NULL); inputpos+=transfered; + Sleep(200); } storeOutput(readstdout,aoutput); @@ -139,6 +145,17 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD CloseHandle(newstdout); CloseHandle(readstdout); CloseHandle(writestdin); - + + *result = pxSuccess; return pxSuccess; } + +void pxEexcute_thread(void *param) +{ + gpg_execution_params *params = (gpg_execution_params*)param; + pxResult result = pxExecute(params->cmd, params->useless, params->out, params->code, params->result); + if(result == pxNotFound) + { + MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK); + } +} \ No newline at end of file -- cgit v1.2.3