Поток с доступом к глобальной переменной основной программыDelphi , Компоненты и Классы , ПотокиАвтор: Xavier Pacheco unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMainForm = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.DFM} { NOTE: Change GlobalStr from var to threadvar to see difference } var //threadvar GlobalStr: string; type TTLSThread = class(TThread) private FNewStr: string; protected procedure Execute; override; public constructor Create(const ANewStr: string); end; procedure SetShowStr(const S: string); begin if S = '' then MessageBox(0, PChar(GlobalStr), 'The string is...', MB_OK) else GlobalStr := S; end; constructor TTLSThread.Create(const ANewStr: string); begin FNewStr := ANewStr; inherited Create(False); end; procedure TTLSThread.Execute; begin FreeOnTerminate := True; SetShowStr(FNewStr); SetShowStr(''); end; procedure TMainForm.Button1Click(Sender: TObject); begin SetShowStr('Hello world'); SetShowStr(''); TTLSThread.Create('Dilbert'); Sleep(100); SetShowStr(''); end; end. Программа на Delphi, демонстрирующая использование глобальной переменной в многопоточной среде. Программа состоит из двух основных компонентов: формы с кнопкой и класса потока Когда кнопка на форме кликается, она вызывает процедуру Поток выполняется в отдельном потоке и сначала устанавливает глобальную переменную в строку "Dilbert", а затем возвращает ее в пустую строку. Затем программа спит на 100 миллисекунд перед тем, как установить глобальную переменную в пустую строку снова. Вот некоторые вещи, которые стоит отметить:
Чтобы увидеть разницу между использованием обычной переменной и локальной переменной потока, можно uncomment строку В целом, программа демонстрирует использование глобальных переменных в многопоточной среде и создание и управление потоками в Delphi. Вот некоторые предложения по улучшению:
Вот обновленная версия кода с некоторыми улучшениями:
Я добавил вызов В статье описывается пример использования потока с доступом к глобальной переменной основной программы в языке Delphi, где создается отдельный поток для выполнения задачи и изменяет значение глобальной переменной. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |