DWORD WINAPI WriteToFiles(LPVOID lp) { EnterCriticalSection(&cs); ofstream out(TEXT("init.txt")); if (!out.is_open()) { MessageAboutError(GetLastError()); return 1; } out << "30.10.1991\n"; LeaveCriticalSection(&cs); TCHAR file_name[16]; for (int i = 0; i < N; ++i) { EnterCriticalSection(&cs); wsprintf(file_name, TEXT("copy_%d.txt"), i + 1); CopyFile(TEXT("init.txt"), file_name, FALSE); ofstream current_out(file_name); current_out << "Copy # " << i + 1 << ": 30.10.1991\n"; current_out.close(); Sync::helper(1); LeaveCriticalSection(&cs); } out.close(); MessageBox(0, TEXT("Поток записи завершил работу"), TEXT("Критическая секция"), MB_OK); return 0; }
void CMyDialog::OnCommand(WPARAM wp, LPARAM lp) { if (LOWORD(wp) == IDC_BUTTON1) { MessageInfo("Hello from DLL"); if (!__FUnloadDelayLoadedDLL2("implicit_linking.dll")) { MessageAboutError(GetLastError()); return; } MessageInfo("Hello from DLL"); } }
DWORD WINAPI ReadFromFiles(LPVOID lp) { EnterCriticalSection(&cs); ofstream result(TEXT("result.txt")); if (!result.is_open()) { MessageAboutError(GetLastError()); return 1; } LeaveCriticalSection(&cs); TCHAR file_name[16]; char buffer[32]; for (int i = 0; i < N; ++i) { EnterCriticalSection(&cs); wsprintf(file_name, TEXT("copy_%d.txt"), i + 1); ifstream current_in; current_in.open(file_name); while (!current_in.is_open()) { LeaveCriticalSection(&cs); EnterCriticalSection(&cs); current_in.open(file_name); } current_in.getline(buffer, 32); result << buffer << endl; current_in.close(); Sync::helper(0); LeaveCriticalSection(&cs); } result.close(); MessageBox(0, TEXT("Поток чтения завершил работу"), TEXT("Критическая секция"), MB_OK); return 0; }