Войти

Показать полную графическую версию : Builder 6.0 потоки


alextrs
15-04-2008, 22:02
У меня вопрос к тем, кто работал с потоками.

Такой фрагмент простой программы:

TMyPot *Thr= new TMyPot(true); // создаю поток в спящем режиме
--------------------------------------------------------------------------
void __fastcall TForm1::StartClick(TObject *Sender)
{

Thr->Resume();//т.е поток запускается при нажатии на Буттон Start

}
---------------------------------------------------------------------------------------------
void __fastcall TForm1::TSuspendClick(TObject *Sender)
{
Thr->Suspend();//т.е поток засыпает при нажатии на Буттон Suspend
}

Все работает,но вот,что я заметил-сколько раз нажмешь на кнопку Suspend,столько же раз надо нажать на кнопку Resume ,
что бы поток снова запустился?Кто знает почему это происходит и как этого избежать?Как будто количество Suspendov где-то сохраняется?
Может можно по-другому?

DillerInc
17-04-2008, 19:21
alextrs, уважаемый,читайте документацию,и будет меньше вопросов.

Each thread has a suspend count (with a maximum value of MAXIMUM_SUSPEND_COUNT). If the suspend count is greater than zero, the thread is suspended; otherwise, the thread is not suspended and is eligible for execution. Calling SuspendThread causes the target thread's suspend count to be incremented. Attempting to increment past the maximum suspend count causes an error without incrementing the count.

The ResumeThread function decrements the suspend count of a suspended thread.
SuspendThread (http://msdn2.microsoft.com/en-us/library/ms686345(vs.85).aspx)

alextrs
17-04-2008, 21:32
Спасибо! Я почти все понял.




© OSzone.net 2001-2012