Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
15-1354877433
TUser
2012-12-07 14:50
2013.04.14
Судебные перспективы


15-1355464494
brother
2012-12-14 09:54
2013.04.14
оптимальна скорость доступа к массиву


15-1355839583
dummy_user
2012-12-18 18:06
2013.04.14
TClassList. Получить класс по названию.


3-1288195610
venator
2010-10-27 20:06
2013.04.14
Direct oracle access - помогите разобраться с ошибкой


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




   Наверх