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

Тема в разделе "WASM.BEGINNERS", создана пользователем 01478520, 2 окт 2007.

  1. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    Вобщем требуется посчитать чексумму файла размером 700мб.
    Вот схема прилож:
    Код (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

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    мож тогда её(ПосчитатьХэшФайла) смотреть надо?
     
  3. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    Нет. даже если поставить простой цикл на 1-2 мин. тож виснет, тоесть не отвечает на нажатие кнопок но убивается через IDCANCEL
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Так как-же оно виснет если убивается через IDCANCEL???????
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    поток создать.
     
  6. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    wsd
    ну да, когда не отвечает опр колич времени на кликания по кнопкам, то подвисает (остаётся пустая рамка проги) и доступно только _ и Х.
    я так понимаю вы с этим не сталкивались?
     
  7. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    n0name

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

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    01478520
    IDCANCEL и IDOK это сообщения кнопок!!!!!! а не крестика окна:)
     
  9. 01478520

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    wsd
    ??? а Х тогда на что реагирует?
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    WM_CLOSE
     
  11. AsmGuru62

    AsmGuru62 Member

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

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

    Uri2 New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2004
    Сообщения:
    10
    согласен. только так.

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

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

    01478520 New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2007
    Сообщения:
    39
    Uri2

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