Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Обработка событий

Rusa


ALTE DOCUMENTE

ZipZag 1.51
РАДИОТЕХНИЧЕСКАЯ КОНСУ&#
Сага о баллонах
АРГОНАВТЫ НА ЛЕМНОСЕ
ПРАКТИЧЕСКОЕ ПРИМЕНЕНИ&#
Аутизм (autism)
Архетипы (archetypes)


Как уже отмечалось, события используются д 21521g65v ля того, чтобы сообщить потокам или процессам о возникновении определенной ситуации. Для создания объекта события используется функция API CreateEvent

HANDLE CreateEvent LPSECURITY ATTRIBUTES lpAttr

BOOL Manual, BOOL Initial,

LPSTR lpszName};

lpAttr Windows NULL Manual TRUE ResetEvent Initial TRUE FALSE

lpszName NULL

CreateEvent NULL

WaitForSingleobject задавая в качестве первого параметра для нее дескриптор этого события. Тем самым выполнение процесса или потока приос­танавливается д 21521g65v о наступления соответствующего события.

SetEvent

BOOL SetEvent HANDLE hEventObject

hEventObject является д 21521g65v ескриптором ранее созданного события. После вызова функции SetEvent WaitForSingleObject



HANDLE hEvent WM CREATE

hEvent = CreateEvent(NULL, FALSE, FALSE,"Myevent");

MyThread MyThread

DWORD MyThread LPVOID param

for(i=0; i<10; i++)

return

}

DWORD MyThread2(LPVOID param)

// Послать информацию о событии

SetEvent hEvent

return

}

MyThreadl MyThread

#include <Windows.h>

#include <String.h>

#include <Stdio.h>

#include "Proc.h"

#define Procmax 5

LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);

DWORD MyThread1(LPVOID); //

DWORD MyThread2(LPVOID); //

char szWinName[] = " "; //

char str[255]; // Буфер строки вывода

int X=0, Y=0; // Текущие координаты строки



int procnum=0; // Количество активных процессов

DWORD Tid1; // Идентификатор 1-го потока

DWORD Tid2; // Идентификатор 3-го потока

int maxX, maxY; // Размеры экрана

HDC memdc; // DC виртуального окна

HBITMAP hbit; // Растр - это виртуальное окно

HBRUSH hbrush; //

PROCESS_INFORMATION pinfo[Procmax];

HANDLE hEvent; //

TEXTMETRIC tm;

int WINAPI WinMain (HINSTANCE hThisInst,

HINSTANCE hPrevInst,

LPSTR lpszArgs,

int nWinMode)

return msg. wParam;

}

// Windows и получает в качестве параметров сообщения

LRESULT CALLBACK WindowFunc(HWND hwnd,

UINT message,

WPARAM wParam,

LPARAM lParam)

// Не более чем Procmax

// Получить метрики текста */

GetTextMetrics(memdc, &tm);

sprintf(str, "Порождается процесс %d",

procnum);

TextOut(memdc, X, Y, str, strlen(str));

Y = Y+tm.tmHeight+tm.tmExternalLeading;

InvalidateRect(hwnd,NULL,1); //Сообщить

// Порождение нового процесса

startin.cb=sizeof(STARTUPINFO);

startin.lpReserved = NULL;

startin.lpDesktop = NULL;

startin.lpTitle = NULL;

startin.dwFlags =STARTF_USESHOWWINDOW;

startin.cbReserved2 = 0;

startin.lpReserved2 = NULL;

startin.wShowWindow = SW_SHOWMINIMIZED;

CreateProcess(NULL, "Test.exe", NULL,

NULL, FALSE, 0, NULL,

NULL, &startin,

&(pinfo[procnum]));

procnum++;

break;

case ID_KILLPROC:

if(procnum)

procnum--;

else

// Получить метрики текста

GetTextMetrics(memdc, &tm);

TerminateProcess

(pinfo[procnum].hProcess, 0);

sprintf(str, " %d ",

procnum);

TextOut(memdc, X, Y, str, strlen(str));

Y = Y+tm.tmHeight+tm.tmExternalLeading;

InvalidateRect(hwnd,NULL,1); //



break;

case ID_THREAD:

CreateThread

(NULL, 0,

(LPTHREAD_START_ROUTINE)MyThread1,

(LPVOID)NULL, 0, &Tid1);

CreateThread

(NULL, 0,

(LPTHREAD_START_ROUTINE)MyThread2,

(LPVOID)NULL, 0, &Tid2);

InvalidateRect(hwnd, NULL, 1);

break;

case ID_HELP:

MessageBox(hwnd,

"F2: Новый процесс\n"

"F3: Завершить процесс\n"

"F4: Новый поток",

"Помощь:", MB_OK);

InvalidateRect(hwnd,NULL,1); //

break;

}

break;

case WM_PAINT: //

hdc=BeginPaint(hwnd,&paintstruct); // DC

// Теперь копируем растр из памяти на экран

BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);

EndPaint(hwnd,&paintstruct); // DC

break;

case WM_DESTROY: // Завершение программы

DeleteDC(memdc); // Удалить виртуальное окно

PostQuitMessage(0);

break;

default:

// Все сообщения, не обрабатываемые в данной

// функции, направляются на обработку по

// умолчанию

return DefWindowProc(hwnd,message,

wParam,lParam);

return 0;

}

DWORD MyThread1(LPVOID param)

for(i=0; i<10; i++)

return

}

DWORD MyThread2(LPVOID param)

// Послать информацию о событии

SetEvent hEvent

return

}




Document Info


Accesari: 836
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )