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