Void *security_attrib, unsigned long flag,unsigned long* tid).

Первым аргументом идет адрес процедуры нити, в стандартном случае эта процедура должна быть функцией без возвращаемого значения (функция типа 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. Лабораторная работа №1. Ввод-вывод в стандартные файлы.
№ вар. Задание: разработать программу с использованием базовых системных функций ОС WINDOWS, которая ….
Вводит символьную строку и число N, отбрасывает от строки последние N символов и выводит оставшуюся часть строки
  1. Лабораторная работа №2. Базовые средства использования файловой системы
№ вар. Задание: разработать программу с использованием базовых системных функций ОС WINDOWS, которая ….
Переписывает вещественные числа из одного файла в два других, в первый положительные числа, а во второй - отрицательные
  1. Лабораторная работа №3. Функции вывода для консольных устройств
№ вар. Задание: разработать программу с использованием базовых системных функций ОС WINDOWS, которая ….
Изобразить в центре экрана квадратное окно зеленого цвета со стороной 20
  1. Лабораторная работа №4. Функции ввода для консольных устройств

Задание: программа запрашивает пароль, состоящий из трех символьных комбинированных сообщений (пароль указан в варианте задания), выводя при этом вместо вводимых символов символ ‘*’. Если пароль введен правильно, то выводится приветствие ‘Hello, User’. Выход из программы осуществить только после ввода символьной комбинации выхода ( см. вариант задания) с предварительной подсказкой.

№ вар. Пароль Выход
…+‘a’ …+‘b’ …+‘c’
Shift LeftAlt [S] [C] Alt Alt+’Q’

[C] - включен режим CapsLock;

[N] - включен режим NumLock;

[S] - включен режим ScrollLock.

Наши рекомендации