Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Многопоточная Обработка

Если вы видели рекламу Xbase++ в компьютерных журналах, то вы уже знаете, что Xbase++ превосходит конкурентные продукты своей уникальной возможностью многопоточной обработки. Это не означает, что другие продукты не поддерживают многопоточную обработку, это означает только то, что в этом мире не существует другого продукта, который предлагал бы вам более легкий путь достигнуть мощи 32-разрядных операционных систем, чем Xbase++. При помощи многопоточной обработки, вы сможете одновременно запускать различные части своей программы.

Если вы никогда раньше не использовали многопоточную обработку, то вам, вероятно, понадобится больше времени, чтобы открыть фантастические возможности этой технологии. Несмотря на это, Xbase++ делает это легким для вас.

Давайте попробуем. Откройте свой редактор. Загрузите файл MOUSE.PRG, который вы создали в начале этого ознакомительного курса, и вставьте одну строчку перед первой командой @..SAY..GET:

SetTimerEvent( 100, {|| DispOutAt( 0, 0, Time())})

@ 10,10 SAY "Hello " GET cVar1 // Этистроки
@ 12,10 SAY "Who ? " GET cVar2           // уже существуют
READ                                       // в MOUSE.PRG

Снова создайте MOUSE.EXE и запустите программу. Она постоянно показывает время в верхнем левом углу, и вы можете в то же самое время редактировать поля Get. Программа выполняется в двух различных потоках. Один выполняет команду READ, а другой каждую секунду вызывает функцию Time() и показывает возвращенное значение. В программе, написанной на Clipper под DOS, также можно показывать время, но это потребует определенных усилий. В Xbase++ это делается одной строчкой.

Если вы интересуетесь технологией многопоточной обработки, то вам следует посмотреть на два примера, которые сложно воплотить в жизнь без этой технологии. Одна программа – это симуляция реального мира, где команда программистов получает доступ к одинокому кофейному автомату (программа показывает некоторые аспекты контроля программы при многопоточной обработке), а другая программа использует некоторые интересные идеи, которые вы когда-нибудь сможете использовать в ваших собственных GUI приложениях. Вы можете дальше исследовать многопоточную обработку, или же вы можете начать читать следующую главу обучающего курса.

В папке Samples откройте папку Basics, а в ней откройте Thread. Запустите программу COFFEE.EXE и дайте ей поработать минуту или две (запустите ее, пусть она поработает, пока вы читаете дальше). Программа состоит из 10 потоков. Одна нить – это кофеварка, остальные девять представляют группу программистов. Программа выполняется в текстовом режиме и все происходящее близко к реальности:

Для работы программисту необходим кофе. Если у него нет кофе, то он пойдет его доставать. Если кофеварка будет пуста, то он ее наполнит. Если один программист наполняет свой стакан, то остальные программисты должны подождать, а если кофеварка только готовит кофе, то все программисты должны подождать, пока кофе не будет готов.

Нажмите клавишу, чтобы прервать программу, и закройте обе папки Thread и Basics. Потом откройте папки Solution и Tooltip. Запустите программу TOOLTIP.EXE и медленно подвигайте указатель мыши на полях ввода или кнопках. Когда мышь долго остается на одном и том же месте, то появляется текст.

Программа использует два потока. Один показывает окно, а другой отслеживает положение указателя мыши. Если указатель не меняет положение в течение определенного интервала времени, то второй поток показывает текст подсказки. Текст исчезает после нажатие левой кнопки.

О многопоточной обработке на сегодня достаточно. Прервите программу TOOLTIP.EXE и закройте обе папки Tooltip и Solution.

Чему я научился?

Я увидел, что программа может запускаться в различных потоках. Это, похоже, довольно легко… Программа COFFEE изящная, а программа TOOLTIP полезная. Возможно, я добавлю такие подсказки в мои графические приложения. В папке Basics большое количество таких примеров. Потребуется достаточно много времени, чтобы посмотреть их все.

-