#define _CRT_SECURE_NO_WARNINGS #include #include #include int counter = 0; //функция для вывода сообщения void ShowMessage() { char message[50]; sprintf(message, "Значение: %d", counter); MessageBoxA(NULL, message, "Значение counter обновлено", MB_OK | MB_ICONINFORMATION); counter++; } //потоковая функция для фонового процесса DWORD WINAPI BackgroundThread(LPVOID lpParam) { while (1) { ShowMessage(); Sleep(5000); //Задержка 5 секунд } return 0; } //Точка входа int WINAPI WinMain(HINSTANCE hlnstance, //дескриптор, присваиваемый запущенному приложению HINSTANCE hPrevInstance, //для совместимости с winl6. В win32 не используется LPSTR lpCmdLine, //указатель на командную строку, если приложение так запущено int nCmdShow) { //значение, которое может быть передано в функцию Show Window() // Создаем новый поток для уведомлений HANDLE hThread = CreateThread( NULL, // Атрибуты безопасности 0, // Размер стека по умолчанию BackgroundThread, // Функция потока NULL, // Параметр потока 0, // Флаги создания NULL); // ID потока if (hThread == NULL) { // Обработка ошибок создания потока //printf("Failed to create thread. Error: %ld\n", GetLastError()); MessageBoxA(NULL, "Error creating thread", "Error", MB_OK | MB_ICONINFORMATION); return -1; } MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessageW(&msg); } // Закрываем дескриптор потока, чтобы избежать утечек CloseHandle(hThread); // Основной поток завершает работу return 0; }