Dll方式的线程,需要引用这个
{== D6DLLSynchronizer =================================================}
{: This unit handles the D6 synchronize problem in DLLs
@author Dr. Peter Below
@desc Version 1.0 created 3 November 2001<BR>
Current revision 1.0<BR>
Last modified 3 November 2001<P>
Usage: <BR>
Just add this unit to the DLL project, make sure you do not modify
the WakeMainThread global event yourself elsewhere. }
{======================================================================}
Unit DLLSynchronizer;
Interface
Implementation
Uses Windows, Messages, classes;
Type
TSyncHelper = Class
Private
wnd: HWND;
Procedure MsgProc( Var msg: TMessage );
Procedure Wakeup( sender: TObject );
Public
Constructor Create;
Destructor Destroy; override;
End;
Var
helper: TSyncHelper = nil;
{ TSyncHelper }
Constructor TSyncHelper.Create;
Begin
inherited;
wnd:= AllocateHWnd( msgproc );
WakeMainThread := Wakeup;
End;
Destructor TSyncHelper.Destroy;
Begin
WakeMainThread := nil;
DeallocateHWnd( wnd );
inherited;
End;
Procedure TSyncHelper.MsgProc(Var msg: TMessage);
Begin
If msg.Msg = WM_USER Then
CheckSynchronize
Else
msg.result := DefWindowProc( wnd, msg.msg, msg.WParam, msg.LParam );
End;
Procedure TSyncHelper.Wakeup(sender: TObject);
Begin
PostMessage( wnd, WM_USER, , );
End;
Initialization
helper:= TSyncHelper.Create;
Finalization
helper.free;
End.
参考:http://www.cnblogs.com/key-ok/p/3380551.html
Dll方式的线程,需要引用这个的更多相关文章
- Python 开启线程的2中方式,线程VS进程(守护线程、互斥锁)
知识点一: 进程:资源单位 线程:才是CPU的执行单位 进程的运行: 开一个进程就意味着开一个内存空间,存数据用,产生的数据往里面丢 线程的运行: 代码的运行过程就相当于运行了一个线程 辅助理解:一座 ...
- Oracle.DataAccess.dll方式操作oracle数据库
Oracle.DataAccess.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnection(Syste ...
- System.Data.OracleClient.dll方式操作oracle数据库
System.Data.OracleClient.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnectio ...
- Oracle.ManagedDataAccess.dll方式操作oracle数据库
Oracle.ManagedDataAccess.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnectio ...
- java 传参方式--值传递还是引用传递
java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...
- Java并发包——使用新的方式创建线程
Java并发包——使用新的方式创建线程 摘要:本文主要学习了如何使用Java并发包中的类创建线程. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/ ...
- 用DLL方式封装MDI子窗体
用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用. 易于程式升级,当程式升级时,不用编 ...
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...
- python用类的方式创建线程---自创建类
用类的方式创建线程---自创建类 import threadingimport time class MyThread(threading.Thread):#自建MyThread类继承threadin ...
随机推荐
- [AngularJS + Webpack] Production Setup
Using Angular with webpack makes the production build a breeze. Simply alter your webpack configurat ...
- SQL查询显示行号、随机查询、取指定行数据
转自:walkingp 1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用 ...
- PTHREAD_MUTEX_INITIALIZER问题
PTHREAD_MUTEX_INITIALIZER 与 expected expression before ‘{’ token 在进行 Posix thread 编程时,出现以下编译错误:err ...
- .NET Core的介绍
ASP.NET5应用程序默认使用.net core来构建应用程序,.net core是一个小的,优化过的.net运行时应用程序. 1. 什么是的.NET Core .NET Core 5 是一由模块化 ...
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
错误: 解决方案: 1."设置应用程序池默认属性"/"常规"/"启用32位应用程序",设置为 true. 如下图所示:(已测试,好使) 方法 ...
- openwrt advanced configuration
openwrt高级配置(汗 照着标题就翻译过来了) openwrt Kamikaze 8.09的一般配置文件都在目录 /etc/config 下面,可以使用脚本来调用参数和设置参数. 比如 sbin/ ...
- DataSet与DataTable基本用法
http://files.cnblogs.com/files/monkeyZhong/DataSetExample.rar 在设计数据库操作或者XML操作等表格数据时,我们难免要跟DataSet和Da ...
- windows API 统计系统字体
最近工作中遇到一个需求,需要统计当前系统中包含的所有字体.在网上逛了一圈后发现了EnumFontFamiliesEx这个API好像就可以实现这个功能.这里将自己对这个API的理解做一个记录,算是对这块 ...
- jQuery慢慢啃之事件(七)
1.ready(fn)//当DOM载入就绪可以查询及操纵时绑定一个要执行的函数. $(document).ready(function(){ // 在这里写你的代码...}); 使用 $(docume ...
- linux 日常命令(磁盘空间)
df –hl 在windows下可以很方便的查看磁盘空间的.但是到了Linux查看磁盘空间,你可能就有点摸不着头脑了,呵呵.不要急,我这就要给你解决这个问题. Df命令是Linux查看磁盘空间系统以磁 ...