MF_BYCOMMAND|MF_ENABLED);
}
else
MessageBox(hWnd,"Ошибка создания процесса", "Информация",
MB_OK);
}
else
{
MessageBox(hWnd,"Слишком много созданных процессов...",
"Внимание!", MB_OK);
}
break;
case IDM_Kill_Process:
if(ProcessNumber>0)
{
if(TerminateProcess(ProcessInformation[ProcessNumber-1].hProcess,0))
{
ProcessNumber--;
if(!ProcessNumber)
EnableMenuItem(hSubMenu,IDM_Kill_Process,
MF_BYCOMMAND|MF_GRAYED);
}
else
MessageBox(hWnd,"Ошибка завершения процесса",
"Информация", MB_OK);
}
else
MessageBox(hWnd,"Процессов больше нет",
"Информация", MB_OK);
break;
case IDM_Exit:
SendMessage(hWnd, WM_CLOSE,0,0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}
файл описаний proc.h
#define IDM_EXIT 103
#define IDM_Kill_Process 102
#define IDM_New_Process 101
файл ресурсов crprocess.rc
ProcessesMenu MENU
{
POPUP "&Processes"
{
MENUITEM "&New process", 101
MENUITEM "&Kill process", 102
MENUITEM SEPARATOR
MENUITEM "E&xit", 103
}
}
Приложение 3
// Пример программы создания потока с помощью функции
// CreateThread( ) Win32 API
// Тип приложения Win32 Console
#include <stdio.h>
#include <iostream.h>
#include <windows.h>
#include <time.h>
// Функция, выполняющаяся в созданном потоке,
//выводит номер потока и текущую дату и время
DWORD WINAPI thread_code(LPVOID threadno)
{
static int k;
time_t t;
time(&t);
cout<<"\n"<< " Executing thread # "<<++k<<" time = "<<ctime(&t);
ExitThread(2);
}
// Функция создания и запуска потока
DWORD start_thread(int j)
{
unsigned long ThreadId;
HANDLE hThread;
hThread = CreateThread(NULL,0,thread_code,0,0,&ThreadId);
if (hThread == NULL) {
printf("\n Error creating thread # %d ", j);
return 3;
}
cout<<"\n"<<" Created thread # "<< j <<" ID= "<< ThreadId;
return 1;
}
int main(void)
{
int i;
for (i=1; i<6; i++) start_thread(i);
cout<<"\n"<< " Press ENTER to exit main thread "<<"\n";
getchar();
return 0;
}
Приложение 4.
//Пример программы создания потоков с помощью функций
//стандартной библиотеки С++ __beginthread()
// заголовочный файл функции process.h
#include <stdio.h>
#include <errno.h>
#include <stddef.h> /* _threadid variable */
#include <process.h> /* _beginthread, _endthread */
#include <time.h> /* time, _ctime */
//Функция, выполняющаяся в отдельном потоке, выводит номер и время потока
void thread_code(void *threadno)
{
time_t t;
time(&t);
printf("Executing thread number %d, time = %s\n",
(int)threadno, ctime(&t));
_endthread(); //Завершение потока
}
//Функция создания потока
void start_thread(int i)
{
int thread_id;
if
((thread_id = _beginthread(thread_code,4096,(void *)i)) ==
(unsigned long)-1)
{
printf("Unable to create thread %d, errno = %d\n",i,errno);
return;
}
// вывод идентификатора потока
printf("Created thread %d, ID = %ld\n", i, thread_id);
}
int main(void)
{
int i;
// Создание новых потоков в цикле
for (i = 1; i < 6; i++) start_thread(i);
printf("\n Press ENTER to exit main thread.\n");
getchar();
return 0;
}
Приложение 5
// Программа,демонстрирующая использование функции CreateProcess() Win32 API
// в консольном приложении
#include <windows.h>
#include <iostream.h>
void main()
{
// передача указателя на пустую структуру о запуске процесса STARTUPINFO
STARTUPINFO info;
memset(&info, 0, sizeof(info));
info.cb = sizeof(info);
// Объявление структуры для дескрипторов и идентификаторов
// нового процесса и потока
PROCESS_INFORMATION pinfo;
// Запускаем программу notepad.exe
if(!CreateProcess(NULL,"c:\\Windows\\Notepad.exe" , NULL, NULL,
FALSE,NORMAL_PRIORITY_CLASS, NULL, NULL,
&info, &(pinfo)))
//Если ошибка создания процесса
{ cout << "CreateThread(..) failed, error code is "
<< GetLastError() << endl;
MessageBox(NULL, "Ошибка создания процесса ", "Информация!",MB_OK);
return;
}
MessageBox(NULL, "Для продолжения нажмите OK",
"Программа запущена!",MB_OK);
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.