1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #define _CRT_SECURE_NO_WARNINGS
- #include <windows.h>
- #include <stdio.h>
- #include <tchar.h>
- 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;
- }
|