Safe locks for multi-thread applications(多线程应用程序的安全锁)
Safe locks for multi-thread applications(多线程应用程序的安全锁)
由AB4327-GANDI,2016年1月9日。永久链接
开源 › mORMot框架
博客
临界区
Delphi
良好实践
mORMot
多线程
一旦你的应用程序是多线程的,就应该保护并发数据访问。我们已经写过关于调试多线程应用程序可能很困难的文章。
否则,可能会出现“竞态条件 ...
Three Locks To Rule Them All(三把锁统治一切)
Three Locks To Rule Them All(三把锁统治一切)
【英文原文】
为了确保线程安全,特别是在服务器端,我们通常使用临界区(critical sections)或锁(locks)来保护代码。在最近的Delphi版本中,我们引入了TMonitor特性,但我更倾向于信任操作系统提供的锁机制,这些锁是通过Windows临界区或POSIX futex/mutex来实现的。
...
End Of Live OpenSSL 1.1 vs Slow OpenSSL 3.0
End Of Live OpenSSL 1.1 vs Slow OpenSSL 3.0
【英文原文】
你可能已经注意到,OpenSSL 1.1.1 系列将于下周一(2024 年 5 月 27 日)达到寿命终止(EOL)……
最明智的选择是尽快切换到 3.0 或 3.1 版本。
当然,我们的 mORMot 2 OpenSSL 单元在 1.1 和 3.x 分支上运行,并在运行时自适应每个分支之间存在的各种 API 不兼 ...
IDocList/IDocDict JSON for Delphi and FPC
IDocList/IDocDict JSON for Delphi and FPC
【英文原文】
多年来,我们的开源 mORMot 框架提供了多种方法来处理在运行时定义的数组/对象文档的任意组合,例如通过 JSON,具有许多功能和非常高的性能。
我们的 TDocVariant自定义变体类型是处理这类无模式数据的一种强大方式,但一些用户觉得它有些令人困惑。
因此,我们围 ...
Delphi TMSMQTT使用笔记
服务端用的是 mosquitto ,下载地址https://mosquitto.org/download/
安装完成后需要配置
找到安装目录:mosquitto.conf,打开后修改 allow_anonymous false(禁止匿名登录),password_file D:\Program Files\mosquitto\pwfile.example(密码存放位置)
创建新用户,安装目录下执行 mosquitto_passwd ...
delphi安卓动态权限申请
delphi安卓动态权限申请
安卓8及以上版本,除了原来的静态权限申请以外,还需要动态权限申请。
delphi10.3开始支持安卓动态权限申请。
delphi11开始官方改变了安卓动态权限申请的参数类型,导致原来编写的代码,编码报错。
下面的代码,可以很好地解决权限问题。兼顾了delphi10.3和delphi11以后版本。
{sensor 2022-07-12 ...
Quick Library 简介
QuickLib 是一个快速开发库
QuickLib是一个快速开发库,它提供了诸如AutoMapper、LinQ、IOC依赖注入、MemoryCache、计划任务、Json和Yml配置、序列化程序等多种功能。这个库特别支持Delphi和Firemonkey的多平台开发,包括Windows、Linux、Android、OSX和IOS。同时,QuickLib也支持freepascal,使得开发人员能够更轻松地构建 ...
delphi ORM和泛型模板实现CRUD
delphi ORM和泛型模板实现CRUD
1)定义数据模型(data-model)
数据模型是ORM数据序列/还原所必需的。
TTable<T: record> = record //1个表
rows: TArray<T>; //表的行
end;
TTable2<T, T2: record> = record //2个表
table1: TTable<T>; //表1
table2: TTable<T2>; ...
Delphi提高开发效率之GExperts专家的使用说明
GExperts是一组通过扩展集成开发环境(IDE)来提高Delphi和C++ Builer程序员工作效率的工具。是一款开源的IDE扩展专家,由于去外网下载GExperts非常的麻烦,这里直接提供了Delphi7和Delphi11.1下的GExperts安装包,并连带最新源码一起打包,方便大家使用学习。下面直接看他具有哪些功能,留下实用的功能,去掉非必要的功能 ...
Delphi TDictionary字典类
TDictionary 是一个开放哈希表,支持泛型,并提供了以下常用属性和方法:
属性:
Count:返回字典中元素的数量。Keys:返回字典中所有键所组成的动态数组。Values:返回字典中所有值所组成的动态数组。
方法:
Add:向字典中添加一个键和其对应的值。Clear:清空字典中的所有元素。ContainsKey:判断字典中是否包含指定的键 ...
delphi Byte 与 字符串(AnsiString、WideString) 相互转换
Byte 与 字符串(AnsiString、WideString) 相互转换
代码
String转Byte
procedure TForm1.Button1Click(Sender: TObject);
var
buf: TBytes;
I: Integer;
begin
//ANSI编码
buf := BytesOf('测试内容');
Memo1.Lines.Add('ANSI编码');
for I := 0 to Length(buf) - 1 do
Memo1.Lines.Add(buf.ToString);
...
Delphi 实现刘谦春晚魔术
看了博友的C# 实现刘谦春晚魔术很好,改成了delphi版的。
1 program Project1;
2
3 {$APPTYPE CONSOLE}
4 {$R *.res}
5
6 uses
7 System.SysUtils,
8 System.Classes;
9
10 var
11 list, removeElement: TStringList;
12 i, NameCount, insertIndex, directCount, sexCount: Intege ...
Delphi 12 Patch1
如果你升级到Delphi12,这个补丁是必须打的。官方也发布了ISO版本,如这个需要重新安装。
https://altd.embarcadero.com/download/radstudio/12.0/radstudio_12_0_inline_116924a.iso
Quality ortal Issues Addresses by This atch (notice QP remains accessible in ...
delphi GUID相关操作
GUID相关操作
代码
procedure TForm1.Button1Click(Sender: TObject);
var
GUID1, GUID2: TGUID;
begin
//创建GUID
if CreateGUID(GUID1) <> 0 then
Memo1.Lines.Add('创建失败');
//转换为字符串
Memo1.Lines.Add(GUIDToString(GUID1));
//分段输出
Memo1.Lines.Add(Format('D1 %x', [GUID1.D1]));
M ...
delphi 里 多用TArray 而不是 array of
今天写代码发现个bug,是delphi 编译器 核心层面的:
unit ddx.att;
interface
uses System.Generics.Collections, System.Rtti;
type
xstring = string;
InstanceName = class(TCustomAttribute)
private
Fvalue: array of string;
public
constructor Create(AValue: array of string);
end;
im ...
Delphi Animation
AnimateFloat 是 Delphi 中用于创建简单动画效果的一个函数,它可以让你平滑地改变控件的属性值,例如位置、大小、透明度等。通过指定起始值和目标值,以及动画持续时间,AnimateFloat 函数可以实现属性值的过渡动画效果。
下面是 AnimateFloat 函数的语法:
procedure AnimateFloat(const AObject: TObject; const ...
delphi的bpl、dcp 、dcu
BPL 英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件。编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文件。既然是DLL文件,那就是在运行时所需要的文件。BPL相当于C++中的DLL
DCP 英文全称:delphi co ...
DELPHI模板编程
DELPHI模板编程
procedure TCRUD<T>.execsql(OnTableModel: TTableModel);
//执行事务性SQL
begin
if req.Body = nil then
Exit;
var pool: TDBPool := GetDBPool(dbid); //database pool
db := pool.Lock;
try
try
table := serialize.TSerial<TTable<T>>.unjson(TStream(req.Body)); //json str ...
delphi 路径操作函数
路径操作函数
System.SysUtils.AnsiCompareFileName
根据当前语言环境比较文件名。
在 Windows 下不区分大小写,在 MAC OS 下区分大小写。
在不使用多字节字符集 (MBCS) 的 Windows 区域设置下,AnsiCompareFileName 与 AnsiCompareText 相同。在 MAC OS 和 Linux 下,AnsiCompareFileName 与 AnsiCompareStr 相同。
begi ...
Delphi中 TStringList 的详细用法
TStringList 类是在Delphi使用最厂的一个对像,我们这里一起来看看 TStringList 的详细用法.
先把要讨论的几个属性列出来:1、CommaText2、Delimiter & DelimitedText3、Names & Values & ValueFromIndex
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。
TStringList 常用方法与属性:
var
...