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, 0, 0 );
End;

Initialization
  helper:= TSyncHelper.Create;
Finalization
  helper.free;
End.

参考:http://www.cnblogs.com/key-ok/p/3380551.html

时间: 2024-10-10 06:43:44

Dll方式的线程,需要引用这个的相关文章

浅谈ThreadPool 线程池(引用)

出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相当于请求创建一个线程: 线程池的作用: 线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程

java 传参方式--值传递还是引用传递

java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的常见编程错误. 对此节选的某些反馈意见认为,我把这一问题搞糊涂了,或者将它完全搞错了.许多不同意我的读者用 C++ 语言作为例子.因此,在此栏目中我将使用 C++ 和 Java 应用程序进一步阐明一些事实. 要点 读完所有的评论以后,问题终于明白了

C# 动态修改dll的签名 以及修改引用该dll文件的签名

原文:C# 动态修改dll的签名 以及修改引用该dll文件的签名 在读取RedisSessionStateProvider配置 提到用mono ceil 来修改程序集以及它的签名,里面GetPublicKey 和GetPubliKeyToken 方法里面那个字符串的获取 以及后来的签名 我们都应该 用code来实现,还有应用该dll文件的签名也一同需要修改. 所以我这里实现了一个简单的helper方法 如下: namespace ConsoleSession { using Mono.Cecil

mvc项目打包成dll后被其他项目引用带来的路由问题

首先介绍一下问题产生的背景.web项目很多都需要权限系统,因此我将权限系统分离开成一个独立的项目,暂且称为Auth系统,以后有哪个项目需要权限系统,只需要引用Auth系统的dll即可.每新建一个mvc项目,都会有默认的路由,参数有name.url.defaults,默认的路由设置是在项目根目录的App_Start文件夹下的RouteConfig.cs中.这里不再细说,但它还有一个参数namespace,类型是string[].新建项目的默认的路由,里面是没有显示这个参数的,默认值是当前项目Con

(转)在ios android设备上使用 Protobuf (使用dll方式)

自:http://game.ceeger.com/forum/read.php?tid=13479 如果你的工程可以以.Net 2.0 subset模式运行,请看这个帖子中的方法. 地址:http://game.ceeger.com/forum/read.php?tid=14359&fid=27 如果只能以.Net 2.0下运行,就可以继续往下看了. ============================================================= protobuf是go

在ios android设备上使用 Protobuf (使用dll方式)

http://game.ceeger.com/forum/read.php?tid=13479 如果你的工程可以以.Net 2.0 subset模式运行,请看这个帖子中的方法. 地址:http://game.ceeger.com/forum/read.php?tid=14359&fid=27 如果只能以.Net 2.0下运行,就可以继续往下看了. ============================================================= protobuf是goog

多线程创建方式及线程安全问题

1.创建线程方式 一:  创建线程方式一继承Thread类 public clsss MyThread extends Thread{ //重写run方法,设置线程任务 Run(){ } } main(){ new MyThread().start(); } 获取线程名称: Thread.currentThread()获取当前线程对象 Thread.currentThread().getName();获取当前线程对象的名称 二:创建线程方式-实现Runnable接口 创建线程的步骤. 1.定义类

VC调用matlab dll方式混合编程(c风格--例2)&lt;二&gt;

VC与Matlab混合编程之调用动态链接库dll--<二> 1.是先建立 matlab 的 m 文件. ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译生成得到h.dll.lib等文件 在matlab命令行中输入: mcc -B csharedlib:ellipsefit ellipsefit.m (此方式为c风格函数) (具体命令含义可参考<精通matlab与C/C++混合程序设计>刘维,第

C#调用C/C++ DLL方式

1.编写一个简单的DLL 设置为导出函数,并采用C风格.函数前加extern "C" __declspec(dllexport).定义函数在退出前自己清空堆栈,在函数前加__stdcall. 新建一个头文件,在头文件中: /* 加入任意你想加入的函数定义*/ extern "C" _declspec(dllexport) int _stdcall add(int *x,int *y); // 声明为C编译.链接方式的外部函数extern "C"