Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка создания дополнительного потока. [D7, WinXP]


GanibalLector ©   (2010-01-27 12:06:00) 

Скажите, а стоит ли проверять ? Я не встречал случаев, когда поток не запускался.

Проверяю, кстати, так :

в самом теле треда первой строкой идет
SetEvent(Event);

...
 var FEvent:THandle;
 P:PJobThread;
begin
 Result:=True;
 FEvent:=CreateEvent(nil,True,False,nil); // евент для результута
 ResetEvent(FEvent);
 New(P);
 P^.SocketDial:= Self;
 P^.Event:=FEvent;
 FJobThread:=BeginThread(nil, 0, MsgThread, P, 0, FJobThreadID);
 case WaitForSingleObject(FEvent,2000) of
   WAIT_OBJECT_0:;
   else
   begin
     Result:=False;
     Exception.Create(sCannotStart);
   end;
 end;
 CloseHandle(FEvent);
end;


Т.е. интересуют, прежде всего, мнения на счет стоит или не стоит. Спасибо !


Вариант   (2010-01-27 14:59:00) [1]


> GanibalLector ©   (27.01.10 13:05) [5]



> Создается хендл, но нити нет? Или получу NULL при BeginThread
> ?

Для дельфи 6 -
хендл создается - нить есть, но не значит, что она тут же будет запущена и получит управление, на то воля ОС.
BeginThread возвращает результат CreateThread - если вернет NULL, значит нить не создана. В теории возможна ситуация, когда из BeginThread выход будет по исключению (Exception при New).
Мне кажется  кода с Event'ом будет достаточно для проверки, что нить получила(получала) управление.


Игорь Шевченко   (2010-01-27 14:35:00) [2]


> Т.е. как мне контролировать ?


Win32Check(returnHandle <> 0)


GanibalLector   (2010-01-27 13:05:00) [3]

Понял. Тогда расскажите, что происходит.


> If the function succeeds, the return value is a handle to
> the new thread.
> If the function fails, the return value is NULL.


Создается хендл, но нити нет? Или получу NULL при BeginThread ?
Т.е. как мне контролировать ? Моего кода с Event'ом достаточно будет ?


Сергей М.   (2010-01-27 12:46:00) [4]

> Это случай с сокетами ?

По барабану с чем.
Поток не может быть создан, если недостаточно ресурсов для его создания.
А уж куда испарились эти ресурсы - то совсем иной вопрос.


GanibalLector   (2010-01-27 12:28:00) [5]


> Стоит обязательно, я как раз периодически встречаюсь с ситуацией
> когда нить не создается из-за нехватки системных ресурсов.
> ..


Это случай с сокетами ? Когда каждая нить обслуживает отдельный сокет клиента ?


Rouse_   (2010-01-27 12:24:00) [6]

Стоит обязательно, я как раз периодически встречаюсь с ситуацией когда нить не создается из-за нехватки системных ресурсов...


Игорь Шевченко   (2010-01-27 12:11:00) [7]

стоит


Наверх

Титульная страница Поиск, карта сайта Написать письмо