Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.14;
Скачать: CL | DM;

Вниз

Проверка создания дополнительного потока.   Найти похожие ветки 

 
GanibalLector ©   (2010-01-27 12:06) [0]

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

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

в самом теле треда первой строкой идет
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 12:11) [1]

стоит


 
Rouse_ ©   (2010-01-27 12:24) [2]

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


 
GanibalLector ©   (2010-01-27 12:28) [3]


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


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


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

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

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


 
GanibalLector ©   (2010-01-27 13:05) [5]

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


> 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 14:35) [6]


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


Win32Check(returnHandle <> 0)


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


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



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

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



Страницы: 1 вся ветка

Текущий архив: 2013.04.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
15-1355571069
OLEG1963LORA
2012-12-15 15:31
2013.04.14
Аппаратное обеспечение


2-1349379021
qwerty123
2012-10-04 23:30
2013.04.14
TreeView и системные иконки


2-1349897717
Anariem
2012-10-10 23:35
2013.04.14
Перемещение Label


15-1355730455
Vegeta
2012-12-17 11:47
2013.04.14
Мультиварка или хлебопечка?


15-1355208502
alexdn
2012-12-11 10:48
2013.04.14
Пхп