From 95aa6738aa0f6e948dcaa1dec9421069d9ef1249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw?= <61850108+Fariusz@users.noreply.github.com> Date: Wed, 3 Feb 2021 14:36:04 +0100 Subject: [PATCH] Dodano komentarze do kodu --- AutoBackup/TaskExecutor.cpp | 24 +++++++++++++++++++++++- AutoBackupConsole/Dialog.h | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/AutoBackup/TaskExecutor.cpp b/AutoBackup/TaskExecutor.cpp index 26077fb..9fb4ece 100644 --- a/AutoBackup/TaskExecutor.cpp +++ b/AutoBackup/TaskExecutor.cpp @@ -24,12 +24,15 @@ using namespace std; DWORD WINAPI MyThreadFunction(LPVOID lpParam); + +//Struktura danych do przekazywania parametrów do wątków typedef struct threadData { string srcDir; string destDir; bool compress = false; }MYDATA, * PMYDATA; +//Przekazywanie przez pusty wskaźnik LPVOID, można stosować dowolny typ danych void TaskExecutor::execute(std::vector tasks) { @@ -41,6 +44,8 @@ void TaskExecutor::execute(std::vector tasks) { tasks[i].destDir += '\0'; tasks[i].srcDir += '\0'; + + //Alokacja pamięci pod dane wątków pDataArray[i] = (PMYDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA)); if (pDataArray[i] == NULL) { @@ -58,6 +63,14 @@ void TaskExecutor::execute(std::vector tasks) } pDataArray[i]->compress = tasks[i].compress; dwThreadIdArray[i] = ' '; + + //Jeżeli nie powiedzie się alokacja pamięci to kończymy bo nasz system nie ma już wolnego ramu + if (pDataArray[i] == NULL) + { + ExitProcess(2); + } + + //Tworzenie wątków hThreadArray[i] = CreateThread( NULL, 0, @@ -65,14 +78,20 @@ void TaskExecutor::execute(std::vector tasks) pDataArray[i], 0, &dwThreadIdArray[i]); + + //Jeżeli tworzenie wątka się nie powiedzie to zgłaszamy błąd if (hThreadArray[i] == NULL) { ErrorHandler((LPTSTR)TEXT("error")); - ExitProcess(3); + //ExitProcess(3); } } DWORD count = tasks.size(); + + //Czekanie na zakończenie wszystkich działajacych watków WaitForMultipleObjects(count, hThreadArray, TRUE, INFINITE); + + //Zamykanie uchwytów i czyszczenie pamięci po wykonanych wątkach for (int i = 0; i < tasks.size(); i++) { CloseHandle(hThreadArray[i]); @@ -172,6 +191,7 @@ void TaskExecutor::DoBackup(string source, string destination, bool compress) } void TaskExecutor::ErrorHandler(LPTSTR lpszFunction) { + // Otrzymanie wiadomości o błędach wykonania programu LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); @@ -186,6 +206,7 @@ void TaskExecutor::ErrorHandler(LPTSTR lpszFunction) (LPTSTR)&lpMsgBuf, 0, NULL); + //Wyświetlanie komunikatów o błędach lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); StringCchPrintf((LPTSTR)lpDisplayBuf, @@ -194,6 +215,7 @@ void TaskExecutor::ErrorHandler(LPTSTR lpszFunction) lpszFunction, dw, lpMsgBuf); MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); + //Czyszczenie buforów LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); } diff --git a/AutoBackupConsole/Dialog.h b/AutoBackupConsole/Dialog.h index 365c0b2..fbe700b 100644 --- a/AutoBackupConsole/Dialog.h +++ b/AutoBackupConsole/Dialog.h @@ -28,7 +28,7 @@ class Dialog int readOption(); void createNewBackupTask(); void saveTask(const BackupProperties& backup); - void clearTasks(); + void clearTasks(); //Usuwa zadania z harmonogramu void showStatus(); void showMessage(std::string text); void startAutoBackupProcess();