Уроки Iczelion'а



         

Урок 15. Тpеды (ветви) - часть 2


  • рабочий тред: Этот тип тредов не создает окно, поэтому он не может принимать какие-либо windows-сообщения. Он существует только для того, чтобы делать предназначенную ему работу на заднем фоне (согласно своему названию).
  • Я советую следующую стратегию при использовании мультитредовых способностей Win32: позвольте основному треду делать все, что связанно с пользовательским интерфейсом, а остальным делать тяжелую работу в фоновом режиме. В этому случае, основной тред - Правитель, другие треды - его помощники. Правитель поручает им определенные задания, в то время как сам общается с публикой. Его помощники послушно выполняют работу и докладывают об этом Правителю. Если бы Правитель делал всю работу сам, он бы не смог уделять достаточно внимания народу или прессе. Это похоже на окно, которое занято продолжительной работой в основном треде: оно не отвечает пользователю, пока работа не будет выполнена. Такая программа может быть улучшена созданием дополнительного треда, который возьмет часть работы на себя и позволит основной ветви отвечать на команды пользователя.

    Мы можем создать тред с помощью вызова функции CreateThread, которая имеет следующий синтаксис:

    CreateThread proto lpThreadAttributes:DWORD,\ dwStackSize:DWORD,\ lpStartAddress:DWORD,\ lpparameter:DWORD,\ dwCreationFlags:DWORD,\ lpThreadId:DWORD

    Функция CreateThread похожа на Createprocess.

    • lpThreadAttributes --> Вы можете использовать NULL, если хотите, чтобы у треда были установки безопасности по умолчанию.
    • dwStackSize --> укажите размер стека треда. Если вы хотите, чтобы тред имел такой же pазмеp стека, как и у основного, используйте NULL в качестве параметра.
    • lрStartAddress --> Адрес функции треда. Эта функция будет выполнять предназначенную для треда работу. Эта функция должна получать один и только один 32-битный параметр и возвращать 32-битное значение.
    • lрarametr --> Параметр, который вы хотите передать функции треда.
    • dwCreationFlags --> 0 означает, что тред начинает выполняться сразу же после его создания. Для обратного можно использовать флаг CREATE_SUSpEND.



    • Содержание  Назад  Вперед