Академический Документы
Профессиональный Документы
Культура Документы
Системное программирование
Содержание
1. Определение потока
2. Однопоточные и многопоточные
процессы
3. Структура потока
4. Повторно входящие или
реентерабельные функции
5. Запуск потока
6. Завершение потока
7. Приостановка потока
int main()
{
int a, b; int с = 0;
cout « "Input two integers: "; cin » 'a » b;
с = sum (a, b) ;
cout « "Sum = " « с « endl; return 0;
}
И.В. Птицына & Б.Ф. Мишнев 12
Параллельность?
•Если после вызова функции sum функция
main не ждет возвращения значения из
функции sum, а продолжает выполняться,
то мы получим программу, состоящую из
двух потоков, один из которых
определяется функцией main, а второй —
функцией sum.
Состояние потоков
• dwMilliseconds
• [in] Минимальный интервал времени, в миллисекундах,
на которое приостанавливается выполняемая работа.0
• INFINITE
• BOOL SwitchToThread().
Параметры
• dwMilliseconds
• [in] Минимальный интервал времени, в миллисекундах, на
которое приостанавливается выполняемая работа.
• Значение нуль заставляет поток оставить остаток своего кванта
машинного времени любому другому потоку равного приоритета,
который является готовым к запуску. Если нет никаких других
потоков равного приоритета, готовых к запуску, функция
немедленно возвращает значение и поток продолжает
выполнение.
• Значение БЕСКОНЕЧНО (INFINITE) вызывает бесконечную
задержку.
• Эта функция не возвращает значений.
• DWORD WaitForMultipleObject (
DWORD nCount,
CONST HANDLE *lpHandles,
BOOL fWaitAll,
DWORD dwMilliseconds);
• INFINITE
• WAIT_TIMEOUT
• WAIT_OBJECT_0
• WAIT_FAILED
/LOW – idle
/BELOWNORMAL
/NORMAL
/ABOVENORMAL
/HIGH
/REALTIME
Ирина Птицына & Борис Мишнев 84
• Например, можно снизить приоритет процесса,
который интенсивно использует центральный
процессор, чтобы он не мешал обычным
действиям системы.
• Изменение приоритета процесса изменяют
приоритеты потоков, повышая их или снижая, но
их относительные установки остаются
прежними.
• Синтаксис
BOOL SetThreadPriority(HANDLE hThread,
// дескриптор потока
int nPriority // уровень приоритета потока);
• THREAD_PRIORITY_TIME_CRITICAL 15 или 31
• THREAD_PRIORITY_HIGHEST +2
• THREAD_PRIORITY_ABOVE_NORMAL +1
• THREAD_PRIORITY_NORMAL 0
• THREAD_PRIORITY_BELOW_NORMAL -1
• THREAD_PRIORITY_LOWEST -2
• THREAD_PRIORITY_IDLE 1 или 16
СПАСИБО ЗА ВНИМАНИЕ!бо
за внимание