Автор
|
Тема: Потоки!!!
|
zlelik |
опубликован 07-05-2001 20:44 MSK
У меня 2 вопроса, 1 - Почему когда я создаю поток в программе, программа сразу начинает жрать 98% процессора (WIn2000) 2 - Можно ли с помощью CreateThread Создать поток не из простой функции а из метода какого-либо класса
|
Kosha
|
опубликован 07-05-2001 20:56 MSK
Насчет первого - не уверен, поэкспериментируй с приоритетами,а насчет второго - можно, если функция объявлена как static. |
zlelik
|
опубликован 07-05-2001 21:37 MSK
Так там нет приоритетов в функции HANDLE CreateThread
|
zlelik
|
опубликован 07-05-2001 22:14 MSK
Спасибо, заработало |
Flex Ferrum
|
опубликован 08-05-2001 03:02 MSK
К томуже, если ты в отдельном потоке цикл крутишь, то не плохо было бы всавить внутрьт цыкла вызов функции Sleep с небольшим интервалом. Это позволит уменьшить расход процессорного времени потоком. По поводу второго - обычно делают так: class TThread { static int ThreadProc(void * Param); protected: int Run(); public: //... void Start(); };int TThread :: ThreadProc(void * Param) { TThread * ThisThread = (TThread *)Param; return ThisThread -> Run(); } void TThread :: Start() { CreateThread(...,(PTHREADPROC)ThreadProc,this); } Извини за возможные неточности, т. к. пишу по памяти. Но, я думаю, суть ясна.
|
zlelik
|
опубликован 10-05-2001 23:09 MSK
Что-то не очень суть ясна |
Flex Ferrum
|
опубликован 11-05-2001 10:28 MSK
Суть в следующем: есть базовый класс, реализующий концепцию потока (TThread). То что нужно выполнить внутри потока ты запихиваешь в метод Run(). Его нужно сделать виртуальным, чтобы можно было переопределять в производных классах. В методе Start происходит непоредственный запуск потока. При этом в качестве аргумента (lpParameter) в функцию CreateThread ты передаешь this, а в качестве функции потока - статический метод ThreadProc. После запуска потока в методе ThreadProc ты берешь этот самый lpParameter, преобразуешь его к указателю на TThread, и вызываешь для него метод Run. Вот вроде и все. В качестве вкусностей можно добавить автоматическое удаления экземпляра класса TThread после завершения потока, методы ожидания завершения потока и многое другое. |