Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Квинтана
  
Главная

Список тестов

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 12:15 Сергей Любезный
 12:10 Sasha Scherbina
 12:07 Axel
 12:06 Ядерный физик
 12:06 ~AQUARIUS~
 11:57 Fox
 
 
Во Флориде и в Королевстве сейчас  12:16[Войти] | [Зарегистрироваться]
Р  Ы  Ц  А  Р  С  К  А  Я     К  В  И  Н  Т  А  Н  А
Логотип

Нити (threads)

Вопрос №1
В наследнике TThread в методе Execute объявлена локальная переменная некоторого типа. Предполагается, что одновременно будут работать несколько нитей, созданных на основе этого класса. Соответственно, они могут одновременно обращаться к этой переменной. Нужна ли в этом случае синхронизация при обращении к данной переменной?
 Варианты ответов:
Синхронизация не нужна
Синхронизация нужна только для переменных типов с автоматическим управлением памятью (AnsiString, динамические массивы и т.п.)
Синхронизация нужна для переменных всех сложных типов (записи, массивы и т.п.)
Синхронизация нужна для переменных любых типов
 
Вопрос №2
Неглавная нить, созданная с помощью наследника TThread, должна обратиться к объекту VCL, созданному в главной нити. Нужна ли при этом синхронизация, и если да, то как она должна реализовываться?
 Варианты ответов:
Синхронизация не нужна
Синхронизация нужна, должна реализовываться критической секцией или мьютексом
Синхронизация нужна, должна реализовываться методом TThread.Synchronize
Синхронизация нужна, может реализовываться как критической секцией или мьютексом, так и методом TThread.Synchronize
 
Вопрос №3
Как работает метод TThread.Synchronize?
 Варианты ответов:
Использует критические секции для синхронизации доступа к объектам VCL
Приостанавливает главную нить, чтобы неглавная могла работать с компонентами VCL, не опасаясь одновременного доступа
Приостанавливает нить, вызвавшую Synchronize, до тех пор пока главная нить не выполнит метод, переданный в Synchronize
Решает проблемы с синхронизацией неизвестным науке способом
 
Вопрос №4
Метод Execute некоторой нити выглядит следующим образом

procedure TSomeThread.Execute;
begin
  while True do
  begin
    Sleep(1000);
    DoSomeThing(); // Вызов некоторого метода класса TSomeThread
  end;
end;


Переменная SomeThread – ссылка на эту нить. Как из кода главной нити корректно остановить нить SomeThread?
 Варианты ответов:
TerminateThread(SomeThread.Handle, 0);
SomeThread.WaitFor;
SomeThread.Terminate;
Любым из перечисленных выше способов
Данная нить не может быть остановлена корректно
 
Вопрос №5
Класс TSomeThread, наследник TThread, содержит следующий код

procedure TSomeThread.TimerEvent(Sender: TObject);
begin
  // Делаем что-то полезное...
end;

procedure TSomeThread.Execute;
var
  Timer: TTimer;
begin
  Timer := TTimer.Create(nil);
  try
    Timer.OnTimer := TimerEvent;
    Timer.Interval := 1000;
    while not Terminated do
      Sleep(2000);
  finally
    Timer.Free;
  end;
end;


С какой частотой будет вызываться метод TimerEvent?
 Варианты ответов:
Вообще не будет вызываться
Раз в секунду
Раз в две секунды
Раз в три секунды
 
Вопрос №6
Класс TSomeThread, унаследованный от TThread, содержит не имеющий параметров метод DoSomething, а метод Execute у этого класса реализован следующим образом

procedure TSomeThread.Execute;
begin
  while not Terminated do
    Synchronize(DoSomething);
end;


Содержит ли этот код ошибки, и если да, то какие?
 Варианты ответов:
Код не содержит ошибок
Код не содержит формальных ошибок, но смысла не имеет
Прототип метода DoSomething не подходит для передачи в Synchronize
В методе Execute отсутствует вызов метода Execute предка
 
Вопрос №7
Метод Execute нити TSomeThread реализован следующим образом

procedure TSomeThread.Execute;
begin
  while not Terminated do
    // Делаем что-то полезное...
  Synchronize(SayGoodBye);
end;

procedure TSomeThread.SayGoodBye;
begin
  Form1.Label1.Caption := 'Нить завершила работу';
end;


В главной форме есть переменная SomeThread, содержащая указатель на экземпляр класса TSomeThread, и кнопка Button1, обработчик которой выглядит следующим образом

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SomeThread <> nil then
  begin
    SomeThread.Terminate;
    WaitForSingleObject(SomeThread.Handle, INFINITE);
    SomeThread := nil;
  end;
end;


Что произойдёт при нажатии на кнопку Button1?
 Варианты ответов:
Нить SomeThread будет остановлена
Произойдёт исключение Access violation
Программа зависнет
Не будет никаких видимых эффектов, но нить SomeThread не будет остановлена
 
Вопрос №8
Условия те же, что и в предыдущем вопросе, но обработчик нажатия кнопки Button1 теперь выглядит так

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SomeThread <> nil then
  begin
    SomeThread.Terminate;
    SomeThread.WaitFor;
    SomeThread := nil;
  end;
end;


Что произойдёт при нажатии на кнопку Button1 в этом случае?
 Варианты ответов:
Нить SomeThread будет остановлена
Произойдёт исключение Access violation
Программа зависнет
Не будет никаких видимых эффектов, но нить SomeThread не будет остановлена
 
Вопрос №9
Как правильно создавать нить без использования класса TThread?
 Варианты ответов:
Функцией CreateThread, реализуемой системной библиотекой kernel32.dll и импортируемой модулем Windows
Функцией BeginThread, реализованной в модуле System
Любой из двух названных функций
 
  
Время на сайте: GMT минус 5 часов

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

Хостинг предоставлен компанией DOTNETPARK (ASP.NET, MS SQL hosting)  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования