Конференция "WinAPI" » Проверка создания дополнительного потока. [D7, WinXP]
 
  • GanibalLector © (27.01.10 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;



    Т.е. интересуют, прежде всего, мнения на счет стоит или не стоит. Спасибо !
  • Игорь Шевченко © (27.01.10 12:11) [1]
    стоит
  • Rouse_ © (27.01.10 12:24) [2]
    Стоит обязательно, я как раз периодически встречаюсь с ситуацией когда нить не создается из-за нехватки системных ресурсов...
  • GanibalLector © (27.01.10 12:28) [3]

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


    Это случай с сокетами ? Когда каждая нить обслуживает отдельный сокет клиента ?
  • Сергей М. © (27.01.10 12:46) [4]
    > Это случай с сокетами ?

    По барабану с чем.
    Поток не может быть создан, если недостаточно ресурсов для его создания.
    А уж куда испарились эти ресурсы - то совсем иной вопрос.
  • GanibalLector © (27.01.10 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'ом достаточно будет ?
  • Игорь Шевченко © (27.01.10 14:35) [6]

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


    Win32Check(returnHandle <> 0)
  • Вариант (27.01.10 14:59) [7]

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



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

    Для дельфи 6 -
    хендл создается - нить есть, но не значит, что она тут же будет запущена и получит управление, на то воля ОС.
    BeginThread возвращает результат CreateThread - если вернет NULL, значит нить не создана. В теории возможна ситуация, когда из BeginThread выход будет по исключению (Exception при New).
    Мне кажется  кода с Event'ом будет достаточно для проверки, что нить получила(получала) управление.
 
Конференция "WinAPI" » Проверка создания дополнительного потока. [D7, WinXP]
Есть новые Нет новых   [134431   +16][b:0][p:0.025]