明天去坐火车,回家,今天就没有事做,本来在弄一个跨进程获取其他程序里面组件,如ListView,ListBox,Button等的信息,突然有个想法自己写个Timer,不用SetTimer函数,我们自己用个多线程也正好实现这个.反正前段时间多线程也弄得比较多,本来想单独讲讲的,现在就用个例子来说明吧.写成一个控件:utTimer.pas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30…
多线程Timer重入问题 由于使用多线程定时器,就会出现如果一个Timer处理没有完成,到了时间下一个照样会发生,这就会导致重入. 对付重入问题通常的办法是加锁,但是对于 Timer却不能简单的这样做,你需要评估一下. 首先Timer处理里本来就不应该做太需要时间的事情,或者花费时间无法估计的事情,比同远方的服务器建立一个网络连接,这样的做法尽量避免. 如果实在无法避免,那么要评估Timer处理超时是否经常发生,如果是很少出现,那么可以用lock(Object)的方法来防止重入.如果这种情况经常…
发现个delphi调用vc写的Dll中包括pchar參数奇怪现象 procedure中的第一行语句不能直接调用DLL的函数,否则会执行报错,在之前随意加上条语句就不报错了奇怪! vc的DLL源代码地址 http://blog.csdn.net/lqena/article/details/46357165 Delphi源代码例如以下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphic…
有时候我们需要在程序里定时地完成一些任务, 比如5秒后发送, 10秒后弹窗之类的操作. 这就需要一个类似于定时器的组件. 这个组件在windows.h里被称为Timer. 设置一个Timer 第一步当然是设置一个Timer了, 在Win32 API里, 没有对象这个概念, 所以别指望像C#一样: Timer t = new Timer(callback_func); t.start(); /*... ...*/ t.stop(); 当然上面只是一个例子, C#也并非真的是这样创建Timer的.…
.NET Framework里面提供了三种Timer System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer 一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler.在这种Timer的EventHandler中可…
mk-timer timer是基于PriorityQueue实现的(和PriorityBlockingQueue区别, 在于没有阻塞机制, 不是线程安全的), 优先级队列是堆数据结构的典型应用 默认情况下, 按照自然顺序(其实就是默认comparator的定义), 最小的元素排在堆头 当然也可以自己重新实现comparator接口, 比如timer就用reify重新实现了comparator接口 整个过程其实比较简单, 开个timer-thread, 不断check PriorityQueue里…
第四节:多线程类的改进   1.需要改进的地方   a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数,让它适合访问 COM 组件.如:在线程时空中能够创建 TAdoConnection; c) 设计一个接口能将一个过程( procedure )塞到线程时空中去运行的功能,这样,不必每次重载 Execute 函数. d) 设计一个输出信息的接口   下一节,将讲解如何用多个线程同时执行相同的任务  …
第一节:初识多线程   1.为什么要学习多线程编程?   多线程(多个线程同时运行)编程,亦可称之为异步编程. 有了多线程,主界面才不会因为耗时代码而造成“假死“状态. 有了多线程,才能使多个任务同时执行,最大化利用CPU资源,提高效率. 在安卓编程中,要求必须是多线程,主界面中的代码只要耗时几秒钟,就会触发 ANR 错误. 多线程编程才是工作中的常态.多线程是必须掌握的!越早越好!   2.网络上 delphi 多线程 Demo 的误区   采用 API 来实现多线程.难度太高,尤其是用指针来…
一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的时候,那是真心纠结啊.刚才还觉得理解了,过一会儿又糊涂了.现在重新再看,还是容易纠结.没办法,用得少.我把读者优先和写者优先都实现了一下.选择性重看了小部分<unix高程>使用了多线程+互斥量实现.   二. 互斥量与信号量 互斥量如其名,同一时间只能被一个线程占有,实现线程间对某种数据结构的互斥…
下周公司要搞黑客马拉松了,组里可能会做个小程序.然后看到了mpvue感觉还不错,于是就打算试试水.用vue写小程序听上去美滋滋.那么先开始吧! 全局安装 vue-cli $ npm install --global vue-cli 创建一个基于 mpvue-quickstart 模板的新项目 $ vue init mpvue/mpvue-quickstart my-project 安装依赖 $ cd my-project$ npm install 启动构建 $ npm run dev 这样子就O…
项目一期已经做完,二期需求还没定稿,所以最近比较闲. 上一篇写的是TCP协议,今天写一下UDP协议.TCP是有连接协议,所以发送和接收消息前客户端和服务端需要建立连接:UDP是无连接协议,所以发送消息前不需要建立连接,只需向指定的网络端点发送消息即可,不管端点是否存在都可以发送,无论消息是否到达端点都不关心,接收消息前也不需要建立连接,只需要在本地绑定的端口上接收就可以了,UDP没有明确的客户端和服务端. 程序是基于命令行的,启动一个实例之后根据界面提示输入本地端口号.远程IP.远程端口号即可,…
最近做一个读市民卡的项目,读卡器公司提供的读市民卡dll是用C++写的. 下面记录一些自己的心得,供需要的朋友参考. 声明dll函数要加上stdcall关键字,否则可能会报地址非法的错误. 代码: unit cMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, ComCtrls,ActiveX, E…
在执行定时任务的时候可以用Timer来实现,现在小编对学到的进行一次总结,先来看一个demo 1 public class TimerTest { 2 3 public static void main(String[] args) throws ParseException { 4 Date date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-08-17 11:18:00"); 5 new Ti…
今天在睡觉醒时,突然感觉对call和apply有了点理解,但是又不好表达出来.就随便写几个例子. function say() { return this.role; } function Father() { this.role = "爸爸"; } function Mother() { this.role = "妈妈"; } function Brother() { this.role = "兄弟"; } alert(say.call(new…
Timer继承子Thread类,是Thread的子类,也是线程类,具有线程的能力和特征.这个类用来定义多久执行一个函数. 它的实例是能够延迟执行目标函数的线程,在真正执行目标函数之前,都可以cancel它. Timer源码: class Timer(Thread): def __init__(self, interval, function, args=None, kwargs=None): Thread.__init__(self) self.interval = interval self.…
SQL 语句的拼接,关键点在于对引号的处理上. 在 delphi 的语法中,使用单引号做字符串的标志符.因此,当遇到 SQL 语句中字符串标识量编写的时候,需要用两个单引号来代替实际的引号. 举例: SQL := 'Insert into table(表名) values(' + ''''数据值1'''' + ',' + ''''数据值2'''' + ',' + ''''数据值'''' + ')'; 看起来单引号太多,显得挺乱. 其实可以用其他手段来完成: 1.使用 QuotedStr 函数 S…
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Cli…
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行的服务端,一个命令行的客户端.服务端启动后根据输入的端口号绑定本机端口并启动侦听,客户端启动后根据输入的客户端数量.服务IP.服务端口号连接服务端.客户端连接成功后启动新线程随机发送消息到服务端并等待接收服务端返回的消息,服务端和客户端成功创建连接后启动新线程接收客户端消息并返回客户端一个消息,如此…
static void sig_when_weakup(int no){ printf("weakup weakup\n"); longjmp(buf, ); } void weakup_after(int n){ ){ signal(SIGALRM, sig_when_weakup); pause(); } else { printf("i'm weak\n"); } } 这配色方案没法改的嘛?…
http://www.cnblogs.com/lackey/p/6297115.html 几个例子: http://www.cnblogs.com/lackey/p/5371544.html…
调用free api做做简易的翻译 这个是百度翻译api文档 http://api.fanyi.baidu.com/api/trans/product/apidoc 照着百度api给的文档向web服务器发送GET/POST请求,得到需要的翻译json格式,再进行解析即可. 但是貌似只能单词翻译,而且还会出现无法翻译“me”或者“he”的bug,果然百度翻译靠不住 下面上源码,一开始可以在官网上下载demo看看: 配置环境:python 3.x 即可 en_to_zh.py #!/usr/bin/…
基础代码: Calendar  currentTime = Calendar.getInstance(); currentTime.setTime(new Date()); int  currentHour = currentTime.get(Calendar.SECOND); currentTime.set(Calendar.SECOND,  currentHour + 20);//第一(大于20秒):currentHour + 20:第二(小于20秒):currentHour - 20:第三…
关于dpdk timer跨越CPU core调度的准确性问题 首先dpdk的timer接口里边使用 cpu cycle来比较时间.根据之前的内容 [dpdk] dpdk --lcores参数 当一个EAL thread映射在多个processor上的时候,cpu cycle有可能在不同的CPU core上面获得, 又因为cpu cycle是使用rdtsc指令获取的,这样会造成拿到的cpu cycle不准的问题. 首先,调查一下 rdtsc 指令: https://stackoverflow.co…
闲来无事,写个dbutils玩玩,不完善,满足基本增删改查,上代码 1.Dbutils package db; import annotation.Table; import java.util.*; import java.sql.*; import java.lang.reflect.Field; /** * * @author xjy * @param <T> */ public class DbUtil<T> { private static DataBase dataBa…
定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在java中主要使用的就是Timer对象,他在内部使用的就是多线程的技术. Time类主要负责完成定时计划任务的功能,就是在指定的时间的开始执行某个任务. Timer类的作用是设置计划任务,而封装任务内容的类是TimerTask类.此类是一个抽象类,继承需要实现一个run方法. 通过查文档我们看到Timer有以下几个构造函数: Timer的方法以下这么多: 下面我们通过定时器来完成一个简单功能,就是在运行项目三秒后,在控制台…
C#多线程编程介绍——使用thread.threadpool.timer 在system.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread.threadpool.timer.下面我就他们的使用方法逐个作一简单介绍. 1. thread 这也许是最复杂的方法,但他提供了对线程的各种灵活控制.首先你必须使用他的构造函数创建一个线程实例,他的参数比较简单,只有一个threadstart 委托: public thread(threadsta…
本例通过Timer的tick()方法触发TimerCallback委托来开辟新的线程,线程中的具体工作通过一个静态方法作为参数给TimerCallback委托. using System; using System.Threading; /* 这是一个关于 timer开启多线程的一个例子 * 1.Timer 的tick事件触发系统内置委托TimerCallback委托.而此委托会触发一个新的线程 .此线程中需要完成的具体的工作写成一个静态方法.作为参数传递给这个委托. * 2.如果是用Timer…
用delphi的THTTPRIO控件调用了c#写的webservice. 下面是我调试时遇到的一些问题: 1,导入wsdl文件:file--new----other----wenservice---WSDLimporter---输入wsdl地址:如下:http://10.0.1.128:7777/ShineMediaPublish/WebService/WebServiceCall.asmx?wsdl 注意末尾的:'?wsdl'不能少.要不可能会说找不到. 2,设置THTTPRIO控件的属性:…
前面我们已经对多线程的基础知识有了一定的了解,那么接下来我们将要对多线程进一步深入的学习:但在学习之前我们还是要对传统的技术进行一次回顾,本章我们回顾的则是:传统线程技术和传统的定时器实现. 一.传统线程技术 1.创建方式 1.继承thread类 Thread t = new Thread(){ @Override public void run() { } }; t.start(); 2.实现Runnable接口 Thread t1 = new Thread(new Runnable() {…
定时/计算在java中主要使用的是Timer对象,他的内部依然是采用多线程方式进行处理 它有四个构造方法 方法名 作用 Timer() 空参 Timer(String name) 指定名字 Timer(boolean isDaemon) 指定为守护线程 Timer(String name,boolean isDaman) 指定名字,指定为守护线程 Timer类的主要作用就是设置计划任务,但是封装任务的类确是TimerTask,TimerTask实现了Runable接口,因此我们要做的也就是重写r…