QDAC项目简介

QDAC 是由 QDAC 开发组为大家提供的一套 Delphi/C++ Builder 跨平台开源组件库,名称取自英文 Quick Data Access Components 的首字母。它支持 Delphi/C++ Builder 2007 以上的版本的开发环境,目标是为大家提供一套高效稳定的跨平台快速数据访问组件,

QWorker编程常见问题与解答

1、QWorker是做什么的? 请参考这篇文章:QWorker – Delphi编写的基于作业的跨平台多线程作业管理器,并阅读下 QWorker专题 中的内容,然后你就明白QWorker是做什么的了。 2、QWorker是线程安全的吗? 首先这个问题分两个方面: 一、QWorker本身是线程安全的,你可以放心的在多线程

PostgreSQL创建分区编写过程小结

这是一个实例,我要对一个数据库表的数据创建一个统计缓存,这个统计缓存由于数据量较大,我采用了按年分布表的方式。首先设计了基表,所有的数据分区都是基于这个基表继承而来。为了方便分区和维护,我专门写了一个函数来创建分区子表。

函数主要做了以下事情: (1)用

流水号生成算法探讨兼论以及相关的账号安全设置

流水号生成是一个看似简单,实际上确实牵涉到复杂的数据库和业务逻辑实现的一个问题。我们先来看一般流水号的基本要求: (1)、它首先要是顺序增长的; (2)、它必需是数据库中每条记录唯一的; (3)、它不能断号; (4)、从流水号能直接看到业务发生的笔数。 好了,就这么四点基本要求,我们现在将其拿回到具体的实践环境中,看一

QMsgPack更新-修正了AsJson的一处Bug并优化SaveToStream

【更新说明】 SaveToStream原来使用Encode返回TBytes类型,这一点重复了创建了流对象,实际上Encode内部一样直接用了流对象,多出来Stream->TBytes->TMemoryStream的步骤,优化后直接省去TBytes转换和重复创建流的开销。 【问题描述】 AsJson属性在将内

关于线程安全的一些讨论整理

在多线程编程中,多线程访问的数据安全和完整性问题是大家关注的一个焦点,在实际编程中必需小心谨慎的处理,以保证不会破坏性访问数据。 这里有几个基础的几句话,供大家参考: (1)、只读不写,对数据是安全的,读到的数据是完整的。 (2)、单写多读,对数据是安全的,但并不代表你读到的数据是完整的。 (3)、同时多写相同位置的内

MSDN关于线程栈的说明

每个新线程或纤程都有自己的栈空间内存占用,保留的栈内存大小表示为虚拟内存中的总分配量。最好是选择尽可能小的堆栈大小和提交所需的线程的堆栈或纤程可靠地运行。为栈保留的内存页不能用于任何其他目的。 线程退出时,栈占用的内存会被释放。但如果线程被另一个线程硬性终止,它的栈不会被释放(按Windows核心编程一书的说法,Exi

Graphics32中TBitmap32清除绘制的所有内容的方法

我们创建了一个透明的位图做为一个层以后,可能因为中间编辑过程的原因,需要清除原来绘制的所有内容,那么用什么办法清除呢?实际上很简单,全部填充为透明度为0的颜色就好了,我用的是

简单、粗爆、直接、有效。 注意一个前提,这个图层的绘图模式应为dmBlend,

在VCL中显示一个非激活状态的窗口

在VCL中,调用窗体的TForm.Show时,窗口被自动激活到前台,从而令前面的窗口失去了焦点。有的时候,这并不是我们需要的效果,我们可能只是显示一个比较复杂的提示窗口,这个窗口默认并不需要获取焦点,而VCL并没有提供这样一个函数。 今天在群里话询问时,以前一直没有想明白怎么搞定TForm的Visible属性,不得闲给

QMacros更新-修正了在Andriod下编译失败的问题

【问题描述】 修正了编译目标环境为在Andriod,报InternalComplie函数参数错误。错误原因是由于传递的参数是Self,而Self在Android平台的编译器中被认为是const类型,而参数要求是一个var类型,因此造成编译失败。 【严重级别】 高 【更新级别】 推荐 【特别感谢】 麦子仲肥

一个无聊的测试结果,Windows位图最大尺寸

在我的笔记本上,这个值是305315840像素,再大的话,调用CreateDIBSection函数就失败了,我用GR32的TBitmap32测试的,每次增加一个像素,直到出错,结果就是这个样子了。开平方根的话,大约是17473×17473像素的样子。 再说下,测试环境:Windows 8.1 64位,4G内存,测试程序

QXML更新-新增HasChild函数以简化编程

【更新说明】 HasChild函数用于判定当前结点下,是否存在指定路径的子结点,如果存在,则返回True,同时,通过AChild参数返回找到的子结点,如果失败,则返回False,等价于下面的代码: [Delphi]

[C++] [crayon-58dd8

QMsgPack更新-新增HasChild函数简化编程,并修正了ForcePath的一处Bug

【更新说明】 HasChild函数用于判定当前结点下,是否存在指定路径的子结点,如果存在,则返回True,同时,通过AChild参数返回找到的子结点,如果失败,则返回False,等价于下面的代码: [Delphi]

[C++] [crayon-58dd8

QJson更新-新增HasChild函数简化编程

【更新说明】 HasChild函数用于判定当前结点下,是否存在指定路径的子结点,如果存在,则返回True,同时,通过AChild参数返回找到的子结点,如果失败,则返回False,等价于下面的代码: [Delphi]

[C++] [crayon-58dd8

QMacros速度简单评测

【测试说明】 本测试只是对QMacros的性能做一个简单的评价,从而给出一定的建议。受限于测试用例的设计无法覆盖各种情况,这些建议未必一定可靠,需要您自己进行一定的进一步测试。 【测试用例】 本次测试主要对比的是系统自带的StringReplace和QDAC中QString提供的StringReplaceW。从理论上来

QMacros中的保存点详解

保存点是QMacros中的一种用于简化你编程的重要途径。当然,其牺牲了一点点效率来提升用性。 首先,QMacros采用了堆栈式的宏管理机制,所以在添加新宏时,如果新宏的名称与旧宏的名称,它就会覆盖旧的宏定义,从而保证当前替换操作能够正确执行。但在退出当前函数时,我们需要将相应的宏定义出栈以便恢复原始值,以保证调用我们的

QMacros模板编译结果的缓存与重用

QMacros支持模板编译虽然很快,但毕竟需要消耗一定的时间进行转换,而编译一次,将模板再缓存起来供下次重复使用,省去再次编译的过程,显然是一种加速替换速度的一种不错的选择。 QMacros编译返回的是一个TQMacroComplied对象,它提供了相关的函数来支持此功能: 1、SaveToStream/SaveToF

[QMacros]-基本使用方法说明

1、创建一个TQMacroManager对象,它用来管理所有的宏。后面所有的操作都必需基于它。 [Delphi]

[C++]

2、将基本的宏入栈,注意确定宏的类型。具体请参考主题中的【QM

QMacros该如何处理在内容中出现起始和结束符?

这是一个很现实的问题,比如我们定义了宏的开始符号为 “[” ,宏的结束符为 “]”,那么如果我们要在模板中包含 “[” 和 “]” 该怎么办呢? 答案就是宏转义,我们可以定义宏 MacroStart , MacroEnd 分别对应下面的宏定义,然后入栈如下: [crayon-58dd895867168776751191