створення потоків

Наступний приклад демонструє, як створити новий потік, який виконує локально визначається функцію ThreadFunc.

DWORDWINAPIThreadFunc (LPVOID lpParam)

wsprintf (szMsg, "Parameter =.", * (DWORD *) lpParam);

MessageBox (NULL, szMsg, "ThreadFunc", MB_OK);

DWORD dwThreadId, dwThrdParam = 1;

NULL, // атрибути безпеки за замовчуванням

0, // розмір стека використовується за умовчанням

ThreadFunc. // функція потоку

dwThrdParam, // аргумент функції потоку

0, // прапорці створення використовуються за замовчуванням

dwThreadId); // повертає ідентифікатор потоку

// При успішному завершенні перевіряє повертається значення.

Для простоти, цей приклад передає покажчик на значення як на параметр функції потоку. Це може бути покажчик на будь-який тип даних або структуру, або це може бути пропущено зовсім, за допомогою передачі покажчика NULL і видалення посилань на параметр в ThreadFunc.

У процесах, де потік міг би створити кілька потоків, щоб виконати певний код, незручно використовувати глобальні змінні. Наприклад, процес, який дозволяє користувачеві відкрити одночасно кілька файлів на деякий час, може створювати новий потік для кожного файлу, з метою, щоб кожен з потоків виконував деяку функцію потоку. Створює потік може передавати унікальну інформацію (таку як ім'я файлу) вимагається для кожного екземпляра функції потоку як параметр. Ви не можете використовувати єдину глобальну змінну для цієї мети, але ви можете використовувати динамічно розподілена строковий буфер.

Створює потік може використовувати параметри функції CreateThread. щоб визначити наступне:

  • Атрибути системи безпеки для дескриптора нового потоку. Ці атрибути захисту включають в себе прапорець успадкування, який встановлює, чи може дескриптор бути успадкований дочірніми процесами. Атрибути системи безпеки до того ж включають в себе дескриптор безпеки, який система використовує, щоб виконати доступ, який контролює всі наступні використання дескриптора потоку перш, ніж надається звернення до нього.
  • Початковий розмір стека нового потоку. Стек потоку призначається автоматично в просторі пам'яті процесу; система збільшує стек наскільки необхідно і звільняє його, коли потік закінчує роботу. Додаткову інформацію див. В статті Розмір стека потоку.
  • Прапорець створення. який дозволяє Вам створити потік в стані очікування. Коли відбулося припинення, потік не запускається до тих пір, поки не буде викликана функція ResumeThread.

Схожі статті