DialogBoxParam. Приложение зависает.

Discussion in 'WASM.BEGINNERS' started by 01478520, Oct 2, 2007.

  1. 01478520

    01478520 New Member

    Blog Posts:
    0
    Joined:
    Apr 18, 2007
    Messages:
    39
    Вобщем требуется посчитать чексумму файла размером 700мб.
    Вот схема прилож:
    Code (Text):
    1. invoke GetModuleHandle,NULL
    2.         mov hInstance,eax
    3.         invoke DialogBoxParam,hInstance,IDC_DLG1,0,ADDR DlgProc,0
    4.         invoke ExitProcess,eax
    5. DlgProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    6.   ...................................
    7. .elseif uMsg == WM_COMMAND
    8.                         ................
    9.             .elseif wParam == IDC_BTN1
    10.                              invoke ПосчитатьХэшФайла, param,param
    11.                         .endif
    12.                        
    13. .endif
    14.  
    15. DlgProc endp
    и после "invoke ПосчитатьХэшФайла, param,param" приложение виснет.
    как от этого избавиться?
    PS: даже если вместо "invoke ПосчитатьХэшФайла, param,param" простой цикл на 1-2 мин, всё равно виснет...
     
  2. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    мож тогда её(ПосчитатьХэшФайла) смотреть надо?
     
  3. 01478520

    01478520 New Member

    Blog Posts:
    0
    Joined:
    Apr 18, 2007
    Messages:
    39
    Нет. даже если поставить простой цикл на 1-2 мин. тож виснет, тоесть не отвечает на нажатие кнопок но убивается через IDCANCEL
     
  4. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    Так как-же оно виснет если убивается через IDCANCEL???????
     
  5. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    поток создать.
     
  6. 01478520

    01478520 New Member

    Blog Posts:
    0
    Joined:
    Apr 18, 2007
    Messages:
    39
    wsd
    ну да, когда не отвечает опр колич времени на кликания по кнопкам, то подвисает (остаётся пустая рамка проги) и доступно только _ и Х.
    я так понимаю вы с этим не сталкивались?
     
  7. 01478520

    01478520 New Member

    Blog Posts:
    0
    Joined:
    Apr 18, 2007
    Messages:
    39
    n0name

    допустим... но ведь в конструкции типа: WinMain, WndProc нет подобных зависаний...
     
  8. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    01478520
    IDCANCEL и IDOK это сообщения кнопок!!!!!! а не крестика окна:)
     
  9. 01478520

    01478520 New Member

    Blog Posts:
    0
    Joined:
    Apr 18, 2007
    Messages:
    39
    wsd
    ??? а Х тогда на что реагирует?
     
  10. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    WM_CLOSE
     
  11. AsmGuru62

    AsmGuru62 Member

    Blog Posts:
    0
    Joined:
    Sep 12, 2002
    Messages:
    689
    Location:
    Toronto
    Windows следит за тем какое время занимает вызов процедуры окна. Если это время превышает какой-то предел - Windows считает это окно как not responding. Естественно, пока выполняется цикл - программные кнопки (ОК, ...) не реагируют, но [Х] - это системная кнопка и она даёт возможность закрыть "мёртвое" окно.

    Как кто-то правильно сказал - надо смотреть код подсчёта суммы. Там может быть неоптимизированный код (функция на час или два) или бесконечный цикл. А лучше организовать thread.
     
  12. Uri2

    Uri2 New Member

    Blog Posts:
    0
    Joined:
    Apr 30, 2004
    Messages:
    10
    согласен. только так.

    вот, покури этот код, там что-то подобное делается.
    http://www.koders.com/assembler/fid40764FA42F293FFA86C0D824EDDB2E444C78B6D0.aspx

    p.s. не пугайся, там много лишнего - тебя должен интересовать момент с CreateThread. И то, как его юзать.
     
  13. 01478520

    01478520 New Member

    Blog Posts:
    0
    Joined:
    Apr 18, 2007
    Messages:
    39
    Uri2

    Да понятно как юзать, уроки зилиона помогают...
    непонятно почему виснет, а в WinMain -> WndProc нет...