Как понять работу функции SuspendThread() ?

Тема в разделе "WASM.BEGINNERS", создана пользователем __sheva740, 4 июн 2020.

Метки:
  1. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    310
    Добрый день.
    Подскажите пожалуйста в чем ошибка?
    По идее поток не должен выполняться, но он выполняется и "выдает единички"
    Не могу понять как работает "invoke SuspendThread"
    Подскажите пожалуйста.
    Код (Text):
    1.  
    2. .586      
    3. .model flat,stdcall
    4. option casemap:none
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\masm32.inc
    9. includelib \masm32\lib\kernel32.lib
    10. includelib \masm32\lib\user32.lib
    11. includelib \masm32\lib\masm32.lib
    12. tread_01 proto
    13. .data
    14. ptread01 db '---------- 1',13,10,0
    15. pThread1 dd 0
    16. .code
    17. start:
    18. mov eax, offset tread_01
    19. invoke CreateThread, NULL, NULL, eax, NULL, NULL, pThread1
    20. invoke CloseHandle,eax
    21.  
    22. invoke SuspendThread, pThread1  ; << тут остановка потока, но она НЕ срабатывает
    23.  
    24.  
    25. .while 1
    26.      invoke Sleep, 300
    27. .endw
    28. invoke ExitProcess,0
    29.  
    30.  
    31. ;=========================================================
    32. tread_01 proc
    33. .while 1
    34.      invoke StdOut, addr ptread01
    35.      invoke Sleep, 300
    36. .endw
    37. ret
    38. tread_01 endp
    39. end start
    40.  
    ... или как иначе приостановить выполнения потока?
    Спасибо
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Тебе надо саспендить по хендлу, а не по тиду.
     
    Indy_ нравится это.
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    __sheva740,

    Если поток не создан, он не может быть заморожен. Надо бы наверно проверять на результат выполнения.

    Хотя немного иначе, будет передан pnull, на некоторых версиях нельзя этот аргумент обнулять. Но даже если поток будет создан как выше сказали любые манипуляции в юм выполняются по описателю, а не ID. Так что ошибки две.
     
  4. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    310
    Rel, Indy_,
    Так и есть.
    Как всегда - снимаю шляпу!
    Спасибо комрады!
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    __sheva740,

    Не забывай, что нужно явно задавать адрес, eg: addr/offset pThread :)
     
  6. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    310
    Благодарю