Запуск потока из главного потока.

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

  1. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Если запускаю сначало поток, па потом создаю диалог, то приложение на ХП падает... На висте работает.
    Потом просто вызывает МесБокс,0,0,0,0

    В чем может быть дело? :dntknw:
     
  2. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    Код в студию
     
  3. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Соответственно, если строку
    invoke CreateThread,NULL,NULL,RunProc,iRunParam,lpRunThread
    Записать не перед запуском окна, а запускать ее после нажатие кнопки ЕХИТ, то все работает.

    Код (Text):
    1. format PE GUI 4.0
    2. entry MyEntry
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.  
    8. gIst dd 0
    9. gWnd dd 0
    10.  
    11. lpRunThread dd 0
    12. iRunParam   dd 0
    13.  
    14. section '.code' code readable executable
    15.  
    16. MyEntry:
    17.     invoke  CreateThread,NULL,NULL,RunProc,iRunParam,lpRunThread
    18.     invoke GetModuleHandle,NULL
    19.     mov [gIst],eax
    20.     invoke DialogBoxParam,eax,2,0,DlgProc,0
    21. ExitApp:
    22.     invoke ExitProcess,0
    23.  
    24. proc DlgProc,hWnd,uMsg,wParam,lParam
    25.     push edi esi ebx
    26.    
    27.     mov eax,[uMsg]
    28.     cmp eax,WM_COMMAND
    29.     je  jCOMMAND
    30.     cmp eax,WM_INITDIALOG
    31.     je  jINITDIALOG
    32.     cmp eax,WM_CLOSE
    33.     je  jCLOSE
    34.     xor eax,eax
    35.     jmp finish
    36.  
    37. jINITDIALOG:
    38.     mov eax,[hWnd]
    39.     mov [gWnd],eax
    40.    
    41.     mov eax,1
    42.     jmp finish
    43.    
    44. jCOMMAND:
    45.     mov eax,[wParam]
    46.     cmp eax,1000
    47.     je  a1000
    48.     xor eax,eax
    49.     jmp finish
    50.    
    51. a1000:
    52.     invoke SendMessage,[hWnd],WM_CLOSE,0,0
    53.     mov eax,1
    54.     jmp finish
    55.    
    56. jCLOSE:
    57.     invoke EndDialog,[hWnd],0
    58.     mov eax,1
    59.    
    60. finish:
    61.     pop ebx esi edi
    62.     ret
    63. endp
    64.  
    65. proc RunProc,param
    66. @@MainLoop2:
    67.     invoke  MessageBox,0,0,0,0
    68.     invoke  Sleep,60000
    69.     jmp     @@MainLoop2
    70.     ret
    71. endp
    72.  
    73.  
    74. section '.idata' import data readable writeable
    75.  
    76.   library kernel, 'KERNEL32.DLL',\
    77.       user,   'USER32.DLL'
    78.  
    79.   import  kernel,\
    80.       GetModuleHandle,'GetModuleHandleA',\
    81.       ExitProcess,    'ExitProcess',\
    82.       CreateThread,     'CreateThread',\
    83.       Sleep,        'Sleep'
    84.  
    85.   import  user,\
    86.     MessageBox,     'MessageBoxA',\
    87.       DialogBoxParam, 'DialogBoxParamA',\
    88.       EndDialog,      'EndDialog',\
    89.       SendMessage,    'SendMessageA'
    90.  
    91. section '.rsrc' resource from 'win32.res' data readable
     
  4. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    1. invoke CreateThread,NULL,NULL,offset RunProc,iRunParam,lpRunThread

    2.invoke MessageBox,0,0,0,0 - это что за новости? В мессаджбоксе 2й и 3й параметры обязательны. Это должны быть валидные указатели на строки.
     
  5. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Удалил все связанное с окном, просто
    MyStart:
    invoke CreateThread...

    не работает :dntknw:((
    Если копирую запуск в действие после нажатия кнопки окна все работает!
    Что за бага? :dntknw: На Висте все работает!!! На ХР нет
     
  6. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Да не, MessageBox,0,0,0,0 Всегда и везде работает... Просто пустое окошко МессагБокса, без текста.
     
  7. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Извиняюсь!!!
    Ступил конкретно, не дописал 1 параметр :dntknw:((
    12 часов за асмом, без пива, это ужасно :)
     
  8. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    А что у тебя осталось после invoke CreateThread... ? ExitProcess? Тогда странно, что в висте работает :\
     
  9. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Вот так надо вызывать
    invoke CreateThread,0,0,RunProc,0,0,addr lpRunThread

    перед RunProc ставить offset или addr не обезательно, оно и так вернёт указатель на процедуру