WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Потоки!!!

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Потоки!!!
zlelik опубликован 07-05-2001 20:44 MSK   Click Here to See the Profile for zlelik   Click Here to Email zlelik  
У меня 2 вопроса,
1 - Почему когда я создаю поток в программе, программа сразу начинает жрать 98% процессора (WIn2000)
2 - Можно ли с помощью CreateThread Создать поток не из простой функции а из метода какого-либо класса
Kosha опубликован 07-05-2001 20:56 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Насчет первого - не уверен, поэкспериментируй с приоритетами,

а насчет второго - можно, если функция объявлена как static.

zlelik опубликован 07-05-2001 21:37 MSK     Click Here to See the Profile for zlelik  Click Here to Email zlelik     
Так там нет приоритетов в функции HANDLE CreateThread
zlelik опубликован 07-05-2001 22:14 MSK     Click Here to See the Profile for zlelik  Click Here to Email zlelik     
Спасибо, заработало
Flex Ferrum опубликован 08-05-2001 03:02 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
К томуже, если ты в отдельном потоке цикл крутишь, то не плохо было бы всавить внутрьт цыкла вызов функции 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     Click Here to See the Profile for zlelik  Click Here to Email zlelik     
Что-то не очень суть ясна
Flex Ferrum опубликован 11-05-2001 10:28 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Суть в следующем: есть базовый класс, реализующий концепцию потока (TThread). То что нужно выполнить внутри потока ты запихиваешь в метод Run(). Его нужно сделать виртуальным, чтобы можно было переопределять в производных классах. В методе Start происходит непоредственный запуск потока. При этом в качестве аргумента (lpParameter) в функцию CreateThread ты передаешь this, а в качестве функции потока - статический метод ThreadProc.
После запуска потока в методе ThreadProc ты берешь этот самый lpParameter, преобразуешь его к указателю на TThread, и вызываешь для него метод Run. Вот вроде и все.
В качестве вкусностей можно добавить автоматическое удаления экземпляра класса TThread после завершения потока, методы ожидания завершения потока и многое другое.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.