Первым аргументом идет адрес процедуры нити, в стандартном случае эта процедура должна быть функцией без возвращаемого значения (функция типа void) и нетипизированным аргументом (формально типа void*). Процедура нити, созданной функцией _beginthreadNT, должна оканчивать специальной функцией _ endthread().
Вторым аргументом указывается размер стека, округляемый практически до значения, кратного 4096.
Третий аргумент arglist задает указатель на строку аргументов, в простейшем случае отсутствия аргументов он может быть задан значением NULL.
Аргумент security_attrib используется в более сложных программах, реализующих всю мощь встроенной защиты в WindowsNT. В обычных случаях его также можно задавать равным NULL.
Пятый аргумент flag служит для задания режима приостановленной при создании нити, что обозначается символической константой CREATE_SUSPENDED. В противном случае (запуск тут же функционирующей нити) этот параметр-флаг устанавливается равным нулю.
Последний параметр функции предназначен для возвращаемого значения идентификатора нити. В случае неудачи при создании нити возвращается число -1, в остальных случаях – хэндл созданной нити, который как переменная может быть описан с типом HANDLE.
Следующий ниже пример иллюстрирует построение и использование нитей.
#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <conio.h>
char lbuk[]=”abcdefghijklmnoprqstuwxy”;
void procthread1(void *arg)
{ int k,j;
for (k=0;k<24;k++)
{ gotoxy(20,k+1);
textcolor(LIGHTBLUE);
for (j=0;j<(int)arg;j++)
cprinf(“%c”,lbuk[k]);
}
}
void procthread2(void *arg)
{ int k,j;
for (k=0;k<24;k++)
{ gotoxy(40,k+1);
textcolor(LIGHTGREEN);
for (j=0;j<(int)arg;j++)
cprinf(“%c”,lbuk[k]);
}
}
void procthread3(void *arg)
{ int k,j;
for (k=0;k<24;k++)
{ gotoxy(60,k+1);
textcolor(RED);
for (j=0;j<(int)arg;j++)
cprinf(“%c”,lbuk[k]);
}
}
void main()
{ HANDLE hthread1,hthread2,hthread3;
unsigned long threadid1,threadid2,threadid3;
int k;
hthread1=(HANDLE)_beginthreadNT(procthread1,4096,(void *)2,NULL,0,&threadid1);
hthread2=(HANDLE)_beginthreadNT(procthread2,4096,(void *)3,NULL,0,&threadid2);
hthread3=(HANDLE)_beginthreadNT(procthread3,4096,(void *)4,NULL,0,&threadid3);
for (k=0;k<24;k++)
{ gotoxy(1,k+1);
textcolor(WHITE);
for (j=0;j<(int)arg;j++)
cprinf(“%c”,lbuk[k]);
}
getchar();
CloseHandle(hthread1);
CloseHandle(hthread2);
CloseHandle(hthread3);
}
Для уничтожения нитей в операционных системах Windows служит системная функция TerminateThread, которая имеет следующий прототип:
BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode).
Обычно эту функцию используют только тогда, когда управление нитью потеряно и она ни на что не реагирует.
Код возврата из нити, завершившейся самостоятельно или прекращенной приказом TerminateThread, может быть получен в другой нити того же процесса путем вызова вспомогательной функции GetExitCodeThread со следующим прототипом:
BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode).
Если задача, указанная аргументом hThread в момент запроса кода еще работает, то функция возвращает значение STILL_ACTIVE в качестве значения второго аргумента.
Код возврата из нормально завершающейся нити формирует системная функция ExitThread, имеющая прототип
Void ExitThread(DWORD dwExitCode).
Задание на лабораторную работу:
1. изучить системные функции мыши для текстового режима MS Windows.
2. составить программу с использованием изученных функций по указанию преподавателя.
ВАРИАНТЫ ЗАДАНИЙ
- Лабораторная работа №1. Ввод-вывод в стандартные файлы.
№ вар. | Задание: разработать программу с использованием базовых системных функций ОС WINDOWS, которая …. |
Вводит символьную строку и число N, отбрасывает от строки последние N символов и выводит оставшуюся часть строки |
- Лабораторная работа №2. Базовые средства использования файловой системы
№ вар. | Задание: разработать программу с использованием базовых системных функций ОС WINDOWS, которая …. |
Переписывает вещественные числа из одного файла в два других, в первый положительные числа, а во второй - отрицательные |
- Лабораторная работа №3. Функции вывода для консольных устройств
№ вар. | Задание: разработать программу с использованием базовых системных функций ОС WINDOWS, которая …. |
Изобразить в центре экрана квадратное окно зеленого цвета со стороной 20 |
- Лабораторная работа №4. Функции ввода для консольных устройств
Задание: программа запрашивает пароль, состоящий из трех символьных комбинированных сообщений (пароль указан в варианте задания), выводя при этом вместо вводимых символов символ ‘*’. Если пароль введен правильно, то выводится приветствие ‘Hello, User’. Выход из программы осуществить только после ввода символьной комбинации выхода (см. вариант задания) с предварительной подсказкой.
№ вар. | Пароль | Выход | ||
…+‘a’ | …+‘b’ | …+‘c’ | ||
Shift | LeftAlt | [S] [C] Alt | Alt+’Q’ |
[C] - включен режим CapsLock;
[N] - включен режим NumLock;
[S] - включен режим ScrollLock.