ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »