Поток не завершается. TerminateThread

Тема в разделе "WASM.BEGINNERS", создана пользователем EvilCoder, 20 дек 2008.

  1. EvilCoder

    EvilCoder New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2006
    Сообщения:
    30
    Добрый день.
    функция TerminateThread не выполняется. LastError = ERROR_INVALID_HANDLE
    Поток создается следующим кодом:
    Код (Text):
    1.     SECURITY_ATTRIBUTES sa;
    2.     sa.nLength = sizeof(sa);
    3.     sa.bInheritHandle = TRUE;
    4.     CreateThread(&sa,NULL,Functaddr,FunctParam,NULL,&hThread);
    Вызов TerminateThread:
    Код (Text):
    1.                 TerminateThread(hThread,0);
    2.                 CloseHandle(hThread);
    P.S. в начале я создавал поток без указания структуры sa. (т.е. NULL) результат тот же.
    в общем я совсем запутался и нифига не понимаю в чем дело. при вызове CreateThread вроде права на поток выставляются THREAD_ALL_ACCESS (в том числе THREAD_TERMINATE) почему возникает ошибка?
    спасибо за внимание...
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    а что возвращает TerminateThread? посмотри GetLastError
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Идентификатор это не хэндл, хэндл в Eax возвращается, его и нужно закрывать.
     
  4. EvilCoder

    EvilCoder New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2006
    Сообщения:
    30
    Так всегда. Целый день ищешь ошибку и не находишь. решившись все таки запостить на форум, проблема решается через 10 минут.
    Ошибка в том что при вызове CreateThread в hThread помещается не хэндл а ИД потока. А хэндл возвращается самой фукнцией. в моем случае в TerminateThread я передавал ИД потока, а не хендл.
    Сорри за топик.

    П.С. эх... надо же так лохануться...
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    это коллективный разум форума помогает ещё до того как кто-то запостит ответ :)))
    имхо лучше лишний раз запостить нелепость, чем тупить над ней в одиночестве ;)
     
  6. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Я сам на эти грабли стал :)

    2 часа угрохал на поиск. Когда обнаружил то бы очень злой на себя.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А разве это скомпилировалось бы без явного каста?
     
  8. EvilCoder

    EvilCoder New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2006
    Сообщения:
    30
    Не, это я просто так отписал. щас код выглядит так:
    Код (Text):
    1.  ModStruct->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) Funct, (void *) lpszModParams, 0, NULL);
    На счет коллективного разума, сказано грамотно.