Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <windowsx.h>
- #include <process.h>
- #include <string>
- #include <iostream>
- #include "resource.h"
- using namespace std;
- #define BUF_SIZE 1024 //1kb
- LPCWSTR szName = L"MyFileMappingObject";
- HANDLE hMapFile, hThread;
- HANDLE rwEvent, exitEvent;
- LPCTSTR pBuf;
- HWND hDlg;
- BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
- BOOL LoadMapping();
- //Считываем инфу с mapped file по ивенту и обрабатываем
- void WINAPIV thread(void*)
- {
- int ButtonCount, status;
- wstring temp; //Строка для вывода инфы на экран
- //Вызываем функцию подключения к mapped file
- LoadMapping();
- do
- {
- //Ждем эвента
- WaitForSingleObject(rwEvent, INFINITE);
- //Копируем в ButtonCount из pBuf переменную типа int
- CopyMemory(&ButtonCount, pBuf, sizeof(int));
- //Очищаем строку
- temp.clear();
- //В цикле формируем строку
- for (int i = 1; i <= ButtonCount; i++)
- {
- //Считываем из памяти (mapped file) инфу о статусе кнопки в status
- CopyMemory(&status, pBuf + sizeof(int) * i, sizeof(int));
- //Формируем строку...
- temp.append(L"Кнопка " + to_wstring(i));
- if (status == 1)
- temp.append(L" нажата");
- else
- temp.append(L" не нажата");
- temp.append(L"\r\n");
- }
- //Кидаем текст в Edit Control
- SetWindowText(GetDlgItem(hDlg, IDC_EDIT), temp.c_str());
- //Выполняем работу, пока не пришел ивент на выход от главного окна
- } while (WaitForSingleObject(exitEvent, 0) != WAIT_OBJECT_0);
- //Посылаем сообщение окну на закрытие
- SendMessage(hDlg, WM_CLOSE, NULL, NULL);
- _endthread();
- }
- int WINAPI wWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPWSTR lpCmdLine,
- int nCmdShow)
- {
- //Подключаемся к нашим ивентам и создаем поток
- rwEvent = CreateEvent(
- NULL,
- TRUE,
- FALSE,
- L"ReadWriteEvent"
- );
- exitEvent = CreateEvent(
- NULL,
- TRUE,
- FALSE,
- L"exitEvent"
- );
- hThread = (HANDLE)_beginthread(&thread, 0, NULL);
- //Отображаем диалог из ресурсов (окно)
- DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), 0, (DlgProc), 0);
- return 0;
- }
- BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- //Заносим hwnd диалога в глобальную переменную
- //нужно для thread
- hDlg = hWnd;
- switch (uMsg)
- {
- case WM_INITDIALOG:
- break;
- case WM_COMMAND:
- {
- break;
- }
- case WM_CLOSE:
- {
- //При закрытии окна безопасно закрываем все хэндлы
- CloseHandle(hThread);
- CloseHandle(hMapFile);
- EndDialog(hWnd, 0);
- return FALSE;
- }
- }
- return FALSE;
- }
- //Подключаемся к mapped file
- BOOL LoadMapping()
- {
- //Подключаемся
- hMapFile = OpenFileMapping(
- FILE_MAP_ALL_ACCESS,
- FALSE,
- szName);
- if (hMapFile == NULL)
- {
- cerr << "Could not open file mapping object " << GetLastError() << endl;
- return FALSE;
- }
- //Открываем
- pBuf = (LPTSTR)MapViewOfFile(hMapFile,
- FILE_MAP_ALL_ACCESS,
- 0,
- 0,
- BUF_SIZE);
- if (pBuf == NULL)
- {
- cerr << "Could not map view of file " << GetLastError() << endl;
- CloseHandle(hMapFile);
- return FALSE;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement