ВУЗ:
Составители:
Рубрика:
6
// используя функцию API
textout(dc,10,10,pchar(s), length(s));
end;
ReleaseDC(Form1.handle,dc); //Освобождаем контекст
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Вызываем функцию Func в составе потока. Для этого
// создаем поток и передаем в него адрес функции
hThread := CreateThread(Nil,0,@Func,Nil,0,THreadID);
if hThread=0 then ShowMessage('No THread');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SuspendThread(hThread); // Приостанавливаем поток
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ResumeThread(hThread); // Продолжаем поток
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Func(nil); // Вызываем функцию обычным способом
end;
end.
В результате выполнения окно программы примет вид:
Комментарии
1. При нажатии кнопки «Создать поток» будут выполняться не один , а два
потока: основной поток приложения обрабатывает сообщения , адресованные
главной форме, дополнительный – выводит числа. Если вызвать функцию
Func(nil) напрямую (при нажатии кнопки «Без потока» ), то все операции будет
выполнять основной поток, поэтому программа «зависнет» , пока не закончится
цикл. В это время окно не реагирует на события , не позволяя себя ни переместить ,
// используя функцию API
textout(dc,10,10,pchar(s), length(s));
end;
ReleaseDC(Form1.handle,dc); //Освобождаем контекст
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Вызываем функцию Func в составе потока. Для этого
// создаем поток и передаем в него адрес функции
hThread := CreateThread(Nil,0,@Func,Nil,0,THreadID);
if hThread=0 then ShowMessage('No THread');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SuspendThread(hThread); // Приостанавливаем поток
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ResumeThread(hThread); // Продолжаем поток
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Func(nil); // Вызываем функцию обычным способом
end;
end.
В результатевы п олнения окно п рог раммы п риметвид:
К ом м е
н тар и и
1. П ринаж атиикноп ки« Создать п оток» б удутвы п олняться неодин, адва
п отока: основной п оток п рилож ения об раб аты вает сооб щ ения, адресованны е
г лавной ф орме, доп олнительны й – вы водит числа. Е с ли вы звать ф ункцию
Func(nil) нап рямую (п ри наж атии кноп ки « Без п отока»), то все оп ерации б удет
вы п олнять основной п оток, п оэтому п рог рамма« зависнет», п окане закончится
цикл. В это время окно нереагируетнасоб ы тия, неп озволяя себ я нип ереместить,
6
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »
