Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Что есть "поток" и как с ними работать?

4.2K
30 ноября 2003 года
mmr
11 / / 30.11.2003
Столкнулся на днях с проблемой реализации одного алгоритма, знаю, что проблема решаема с помощью потоков, но как с ними работать?..
319
01 декабря 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by mmr
Столкнулся на днях с проблемой реализации одного алгоритма, знаю, что проблема решаема с помощью потоков, но как с ними работать?..


Поток это один из путей выполнения программы. Каждый поток принадлежит какому-нибудь процессу. Процесс, если упрощенно, то это общие ресурсы для потоков процесса (общая память, например). Каждый процесс имеет один как минимум один поток - "главный". Процессорное время распределяется между потоками по их приоритетам. Всего есть 30 приоритетов, при назначении приоритетов, задаешь приоритет своего процесса и потом относителдьный приоритет потока. Суммарный приоритет потока вычисляется как приоритет процесса плюс/минус относительный приоритет потока.
Потоки бывают рабочие и пользовательские, главное отличие - по умолчанию у рабочего потока нет очереди сообщений, а у пользовательского есть. Рабочие потоки удобно применять для фоновых задач, типа вычислений, записи в файл и т.д. В основном они и используются.
Поток имеет свою потоковую функцию - код. При вызове потока, в функции вызова необходимо указать его потоковую фукнцию. Рабочий поток нормально завершается по выходе из своей потоковой функции. Ненормально поток завершается, например, при завершении процесса (процесс завершается до завершения рабочего потока). Здесь могут возникнуть проблемы.
Ресурсы, захваченные одним потоком надо освобождать, иначе они будут недоступны другим потокам.
Чтобы запустить рабочий поток в MFC вызываешь AfxBeginThread(...).
Вобщем, для вызова твоего рабочего потока пишешь потоковую функцию, и передаешь ее адрес при вызове AfxBeginThread() или через CreateThread(...).
Вот это очень кратко, а лучше отдельно документацию почитать.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог