Форум: "WinAPI";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];
ВнизПроверка создания дополнительного потока. Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c