Параллельные процессы отображения графических элементов? Многопоточная реализация задачи!
Уважаемые пользователи MidletPascal!
Воспользовавшись советами по стандартной процедуре setClip и модулю Lib_threads.class предпринял попытку реализации многопоточной задачи, согласно которой два элемента с размещением в верхней части(каретка) и нижней части экрана(панель поиска), парраленьно и независимо друг от друга должны, как два независимых друг от друга потока, присутствовать и отсутствовать на экране в режиме showCanvas в течении следующих временных интервалов, каждый элемент соответствеено: каретка 1 сек. на присутствие и 1 сек. на отсутствие; панель поиска 2 сек. на присутствие и 2 сек. на отсутстуие. Повторяя условие, согласно которому оба элемента должны работать независимо друг от друга как два независимых параллельных потока, я не убедился их многопоточной и независимой работе.
В чём же дело? Что заствляет задачу вести себя как однопоточный процесс.
C уважением MidletUser.
Код попытки реализации задачи:
program NewProject1;
uses threads;
var first_run: boolean; //Используем для прерывания работы потока 1
var img: image;
procedure carrier();
begin
while first_run = true do
begin
showCanvas;
setColor(0,0,0);
drawText('I',0,0);
repaint;
delay(1000);
showCanvas;
setClip(0,0,240,14);
setColor(0,255,255);
fillRect(0,0,240,14);
repaint;
delay(1000);
end;
end;
procedure pict();
begin
while first_run = true do
begin
showCanvas;
drawImage(loadImage('/search.png'), 0, 300);
repaint;
delay(2000);
showCanvas;
setClip(0,300,240,20);
setColor(255,255,255);
fillRect(0,300,240,20);
repaint;
delay(2000);
end;
end;
procedure thread_id(Uid: integer);
begin
while first_run = true do
begin
if Uid = 1 then carrier;
if Uid = 2 then pict;
end;
end;
begin
first_run := true;
while first_run = true do
begin
threads_start(1);
threads_start(2);
end;
end.
|