delphi——用线程创建一个窗体笔记
Delphi4技术内幕中提到 Delpih VCL线程是不安全的 要在线程中调用VCL的方法可以用TThread类实现
TThread有两个好处
1.提供了Synchronize函数,可以从一个线程中调用VCL
2.它提共了线程局部存储器(thread local storeage)
SynChronize 是TThread中的一个方法,可以用它封装对要调用VCL方法的调用
Delphi Help里有例子
This example shows how to call a button抯 click method in a thread-safe manner:
procedure TMyThread.PushTheButton;
begin
Button1.Click();
end;
procedure TMyThread.Execute;
begin
...
Synchronize(PushTheButton);
...
end;
这是唯一一个能在线程中调用VCL的方法,作用:使线程临时成为应用主程序的一部分
当一个程序在线程中不能访问VCL,解决的方法:SynChronize(ThreadMethod);
unit Unit3;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTMainForm = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;TMyThread = class(TThread)protectedprocedure execute;overload;procedure CallVclMethod;end;varMainForm: TMainForm;implementationuses Unit4;{$R *.dfm}{ TMyThread }procedure TMyThread.CallVclMethod;
beginChildForm := TChildForm.Create(Application);ChildForm.Show;ChildForm.Update;
end;procedure TMyThread.execute;
beginSynchronize(CallVclMethod);
end;procedure TMainForm.Button1Click(Sender: TObject);
varMyFunc:TMyThread;
beginMyFunc := TMyThread.Create(false);MyFunc.execute;MyFunc.Free;
end;end.
实际作用是暂时结束当前线程,并使它成为你应用程序中的一部分,在这段时间内就可调用VCL方法,当结束访向VCL后,中断程序中同步代码
SynChronize使线程与应程程序具有同步性
转载于:https://www.cnblogs.com/pengshao/archive/2011/04/16/2018457.html
delphi——用线程创建一个窗体笔记相关推荐
- Windows编程第一课:纯手工创建一个窗体
第一节 创建应用程序主窗体 1 创建消息处理函数 LRESULT CALLBACK fWinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara ...
- C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )
一. 概述 在使用C#进行应用程序设计时,经常会采用多线程的方式进行一些后台任务的工作.对于不同的应用场景,使用的策略也不尽相同. 1. 后台循环任务,少量UI更新:例如批量上传文件,并提供进度.这种 ...
- 利用线程池为线程创建一个守护线程
主线程: public class MainThread implements Callable {SimpleDateFormat sdf =new SimpleDateFormat("y ...
- Java实训——创建一个窗体程序,实现简单的数学加、减法测试。
实训要求: 代码: MainClass类: public class MainClass {/*** @param args*/public static void main(String[] arg ...
- 我的Go语言学习之旅七:创建一个GUI窗体
在上次中,刚刚学过了 弹窗效果,这里再接着学习一下如何创建一个窗体. 还是老路子,先上代码: package mainimport ( "github.com/lxn/go-winapi& ...
- Eric6最简单的应用(创建一个项目-窗体-编译-运行)
1.创建项目 2.创建一个窗体 自动弹出Qt designer 工具,可视化窗体界面: 创建一个关闭按钮,关闭这个窗体: 保存后,选择ui文件,进行编译ui文件: 然后执行该脚本,即可: 以上是eri ...
- Delphi Thread 线程(1)
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到, 但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synch ...
- 纯C++创建Windows窗体(理解WinMain()与WndProc())
一直比较关注本质的东西.VC封装了很多,想了解一下比较麻烦. 先从了解WinMain()入口函数与WndProc()消息处理函数开始吧. 大气象 #include <windows.h> ...
- 用java创建一个最简单的窗口
如何使在创建窗体前,需要导入相关的 package 包. import java.awt.*; import javax.swing.*; 使用new关键词来创建一个窗体对象 JFrame j ...
最新文章
- NodeJS加MongoDB应用入门
- CascadePSP 测试笔记
- 开机出现grub rescue无法进入系统 恢复ubuntu系统下grub引导 windows xp和ubuntu9.10双系统引导程序的修复
- 学习笔记(七)——jQuery(一)
- ML之回归预测:机器学习中的各种Regression回归算法、关键步骤配图
- 案例 | 撇开虚荣指标,如何策划一场成功的拉新活动?
- 你当真了解count(*)count(id)count(1)吗?
- [Leedcode][JAVA][第9题][回文数][数学法]
- 网络管理不简单 需化被动为主动
- kafka--Struct Streaming--kafka案例
- ie剪切增强版工具---自由填表工具filltable
- linux 查看vcf文件,转载-VCF格式详解
- 今天是我的生日,也是我的离职日!
- TCP,UDP,IP,数据链路层头部详解
- 美颜SDK架构技术分析
- 计算机硬件未来发展前景,计算机硬件发展现状
- 基于乾坤的微前端+SpringBoot2.7整套解决方案的基础通用平台及组件
- 4G LTE各band对应的频率一览表
- SAS卡,RAID卡,HBA卡区别与联系
- yii2框架 电商系统在线直播开发