Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
одом drawString.
   С этим, однако, есть небольшая сложность - метод drawString не может 
отображать отдельные символы. Поэтому мы должны создать строку, состоящую из 
одного символа и передать эту строку методу drawString.
   Эта задача решается достаточно просто.
   Прежде всего, мы определяем массив, состоящий из одного символа, и временную 
текстовую строку s:
char[] ch;
String s;
ch = new char[1];
   В самый первый элемент массива мы записываем текущий символ:
ch[0] = m_Str.charAt(nCurrentChar);
   Затем мы создаем строку из массива, пользуясь конструктором, специально 
предусмотренным для этой цели в классе String:
s = new String(ch);
   Все! Теперь можно отображать строку, состоящую из одного символа, в текущей 
позиции:
g.drawString(s, nCurrentXPos, yPos);
   После отображения символа мы увеличиваем текущую позицию по горизонтальной 
оси на ширину только что нарисованного символа, а затем переходим к следующему 
символу в строке, увеличивая счетчик nCurrentChar:
nCurrentXPos += nCurrentCharWidth;
nCurrentChar++;
   По идее после увеличения счетчика nCurrentChar мы должны были бы проверить 
его значение на предмет выхода за границы строки, однако метод run поступает 
лучше. При получении из строки символа с номером nCurrentChar при помощи метода 
charAt возможно возникновение исключения StringIndexOutOfBoundsException, 
которое и обрабатывается методом run.
   При обработке исключения метод run сбрасывает номер текущего символа и 
текущую позицию, перерисовывает окно аплета (в результате чего оно очищется), и 
после выполнения задержки в полсекунды продолжает процедуру рисования символов.
   Синхронизация задач
   Мультизадачный режим работы открывает новые возможности для программистов, 
однако за эти возможности приходится расплачиваться усложнением процесса 
проектирования приложения и отладки. Основная трудность, с которой сталкиваются 
программисты, никогда не создававшие ранее мультизадачные приложения, это 
синхронизация одновременно работающих задач.
   Для чего и когда она нужна?
   Однозадачная программа, такая, например, как программа MS-DOS, при запуске 
получает в монопольное распоряжение все ресурсы компьютера. Так как в 
однозадачной системе существует только один процесс, он использует эти ресурсы 
в той последовательности, которая соответствует логике работы программы. 
Процессы и задачи, работающие одновременно в мультизадачной системе, могут 
пытаться обращаться одновременно к одним и тем же ресурсам, что может привести 
к неправильной работе приложений.
   Поясним это на простом примере.
   Пусть мы создаем программу, выполняющую операции с банковским счетом. 
Операция снятия некоторой суммы денег со счета может происходить в следующей 
последовательности:
* на первом шаге проверяется общая сумма денег, которая хранится на счете;
* если общая сумма равна или превышает размер снимаемой суммы денег, общая 
сумма уменьшается на необходимую величину;
* значение остатка записывается на текущий счет.
   Если операция уменьшения текущего счета выполняется в однозадачной системе, 
то никаких проблем не возникнет. Однако представим себе, что два процесса 
пытаются одновременно выполнить только что описанную операцию с одним и тем же 
счетом. 
 
<<-[Весь Текст]
Страница: из 275
 <<-