ВУЗ:
Составители:
49
dwCreationFlags – флажки, которые управляют созданием потока. Если установлен
флажок CREATE_SUSPENDED, создается поток в состоянии ожидания и не
запускается до тех пор, пока не будет вызвана функция ResumeThread. Если это
значение нулевое, поток запускается немедленно после создания.
lpThreadId – указатель на переменную, которая принимает идентификатор потока.
Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения –
дескриптор нового потока. Если функция завершается с ошибкой, величина
возвращаемого значения – NULL. Чтобы получать дополнительные данные об
ошибках, вызовите GetLastError.
При успешном выполнении функция создаѐт поток, возвращает его
дескриптор, а в переменную, на которую указывает параметр lpThreadId, заносится
идентификатор потока. Выполнение потока начинается с выполнения функции,
адрес которой указывает параметр lpStartAddress. Это любая функция, в которую
передается один аргумент, являющийся указателем на любую величину –
lpParameter. Если передавать ничего не надо, то надо присваивать значение NULL.
Формат функции:
DWORD WINAPI Название_функции(LPVOID);
Работа потока завершается оператором return в конце функции. Пример
создания потока представлен в листинге 17. Здесь Func – указывает на функцию, с
которой выполняется новый поток.
DWORD lpT;
HANDLE h=CreateThread(NULL,0,Func,NULL,0,&lpT);
CloseHandle(h);
Листинг 17 – Создание нового потока
В качестве примера использования нескольких потоков в одном процессе,
можно привести ситуацию, когда приложению нужно записать большой файл на
диск. При использовании одного потока – доступ к другим функциям программы
будет недоступен до окончания операции.
Одной из распространенных задач, является поиск файлов в заданном
каталоге. Для поиска файлов используются две функции FindFirstFile и
FindNextFile. Алгоритм работы следующий – создается рекурсивная функция,
например FindFile. В неѐ передается начальный каталог, в котором необходимо
найти все входящие файлы и каталоги. Первоначально вызывается функция:
Функция FindFirstFile
HANDLE FindFirstFile
(
LPCTSTR lpFileName, // адрес пути для поиска
LPWIN32_FIND_DATA lpFindFileData); // адрес структуры
// LPWIN32_FIND_DATA, куда будет записана
// информация о файлах
dwCreationFlags – флажки, которые управляют созданием потока. Если установлен
флажок CREATE_SUSPENDED, создается поток в состоянии ожидания и не
запускается до тех пор, пока не будет вызвана функция ResumeThread. Если это
значение нулевое, поток запускается немедленно после создания.
lpThreadId – указатель на переменную, которая принимает идентификатор потока.
Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения –
дескриптор нового потока. Если функция завершается с ошибкой, величина
возвращаемого значения – NULL. Чтобы получать дополнительные данные об
ошибках, вызовите GetLastError.
При успешном выполнении функция создаѐт поток, возвращает его
дескриптор, а в переменную, на которую указывает параметр lpThreadId, заносится
идентификатор потока. Выполнение потока начинается с выполнения функции,
адрес которой указывает параметр lpStartAddress. Это любая функция, в которую
передается один аргумент, являющийся указателем на любую величину –
lpParameter. Если передавать ничего не надо, то надо присваивать значение NULL.
Формат функции:
DWORD WINAPI Название_функции(LPVOID);
Работа потока завершается оператором return в конце функции. Пример
создания потока представлен в листинге 17. Здесь Func – указывает на функцию, с
которой выполняется новый поток.
DWORD lpT;
HANDLE h=CreateThread(NULL,0,Func,NULL,0,&lpT);
CloseHandle(h);
Листинг 17 – Создание нового потока
В качестве примера использования нескольких потоков в одном процессе,
можно привести ситуацию, когда приложению нужно записать большой файл на
диск. При использовании одного потока – доступ к другим функциям программы
будет недоступен до окончания операции.
Одной из распространенных задач, является поиск файлов в заданном
каталоге. Для поиска файлов используются две функции FindFirstFile и
FindNextFile. Алгоритм работы следующий – создается рекурсивная функция,
например FindFile. В неѐ передается начальный каталог, в котором необходимо
найти все входящие файлы и каталоги. Первоначально вызывается функция:
Функция FindFirstFile
HANDLE FindFirstFile
(
LPCTSTR lpFileName, // адрес пути для поиска
LPWIN32_FIND_DATA lpFindFileData); // адрес структуры
// LPWIN32_FIND_DATA, куда будет записана
// информация о файлах
49
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »
