как можно выстроить Thread'ы в очередь?

Тема в разделе "WASM.BEGINNERS", создана пользователем heed, 16 окт 2010.

  1. heed

    heed New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    21
    например поочерёдно выполняется несколько действий в которых Sleep(XXXX) , ну или как у Ицзелиона
    wasm.ru/article.php?article=1001015
    Вышепpиведенная функция создает тpед, котоpый запустит пpоцедуpу под названием ThreadProc паpаллельно с основным тpедом. Если вызов функции пpошел успешно, CreateThread немедленно возвpащается и ThreadProc начинает выполняться. ........
    Код (Text):
    1.    ThreadProc PROC USES ecx Param:DWORD
    2.  
    3.            mov  ecx,600000000
    4.    Loop1:
    5.            add  eax,eax
    6.            dec  ecx
    7.  
    8.            jz   Get_out
    9.            jmp  Loop1
    10.    Get_out:
    11.            invoke PostMessage,hwnd,WM_FINISH,NULL,NULL
    12.  
    13.            ret
    14.    ThreadProc ENDP
    не понял для чего там add eax,eax

    Не соображу как можно запускать по очереди , например штук 5, таких действий используя только один Thread и что-бы не подвисало окно основного процесса
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    heed
    Ну это уже проблемы системы. Не подвисает - все работает. Подвисает - меняй комп или переустанавливай систему.
    А вообще за выполнением ветвей следит система и вне зависимости от загруженности одной ветви другие могут ничего не делать, но так и так получат свой кусок процессора (т.к. они ничего не делают их время будет распределено между теми, которые загружены). Вообще в процессе могут быть и все ветви загружены, но друг друга они будут замещать и выполняться как бы параллельно, тормозя вне зависимости от тормозов другой.
     
  3. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Попробуй юзать Fibers, всё в одном потоке, сам "планируешь". Только от подвисаний не спасет - должен быть поток, обрабатывающий сообщения.
     
  4. heed

    heed New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    21
    Вроде разобрался, в ThreadProc должен быть цикл передающий окну сообщения.
    Иногда неслабо туплю :dntknw:
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Можно и шедулер собрать юзермодный. Только это уж точно не в этом разделе должно обсуждаться.
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Clerk
    а насколько сложно поменять адрес ThreadProc уже после создания потока?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    t00x
    Он в контексте, Eax: @ThreadProc, Ecx: ThreadProcArg. Разумеется если поток остановлен.
     
  8. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Хм.., разве юзая критических сейкций нельзя добиться того же результата ?
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    Эта задача хороший пример того, что описание задачи фактически приводит к её решению.