ALTE DOCUMENTE
|
|||||||
Принципиально н& 626p1513g #1086;вым свойством Windows Windows
Windows
API CreateThread
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpAttr,
DWORDdwStack,
LPTHREAD_START_ROUTINE lpFunc,
LPVOID lpParam, DWORD dwFlags,
LPDWORD lpdwID
lpAttr Windows XP NT NULL
dwStack
и продолжается до завершения этой функции. Адрес потоковой функции (точки входа для потока) задается в параметре lpFunc
DWORD threadfunc LPVOID param
lpParam CreateThread
dwFlags CREATE SUSPEND ResumeThread lpdwID
TerminateThread
BOOL TerminateThread(HANDLE hThread, DWORD dwStatus);
hThread a dwStatus
TerminateThread TerminateThread
API Beep
BOOL Beep(DWORD frequency, DWORD duration);
frequency duration
Beep
#include <Windows.h>
#include <String.h>
#include <Stdio.h>
#include "Proc.h"
#define Procmax 5
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
DWORD MyThread(LPVOID); //
char szWinName[] = " "; //
char str[255]; // Буфер строки вывода
int X=0, Y=0; // Текущие координаты строки
int procnum=0; // Количество активных процессов
DWORD Tid // Идентификатор потока
int maxX, maxY; // Размеры экрана
HDC memdc; // DC виртуального окна
HBITMAP hbit; // Растр - это виртуальное окно
HBRUSH hbrush; //
PROCESS_INFORMATION pinfo[Procmax];
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
// Порождение нового процесса
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
(LPTHREAD_START_ROUTINE)MyThread,
(LPVOID)NULL, 0, &Tid);
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 MyThread(LPVOID param)
return
}
Process rc
include <Windows h>
include "Proc h"
MYMENU MENU
MENUITEM " ", ID_HELP
}
MYMENU ACCELERATORS
Proc h
#define ID_PROCESS 100
#define ID_KILLPROC 101
#define ID_THREAD 102
#define ID_HELP 103
|