InterLockedIncrement and InterLockedDecrement 实现数的原子性加减. 什么是原子性的加减呢? 举个例子:如果一个变量 Long value =0; 首先说一下正常情况下的加减操作:value+=1: 1:系统从Value的空间取出值,并动态生成一个空间来存储取出来的值: 2:将取出来的值和1作加法,并且将和放回Value的空间覆盖掉原值.加法结束. 如果此时有两个Thread ,分别记作threadA,threadB. 1:threadA将Value从…
最近在做一个视频回放项目,记录下一点总结. 应用背景: 假设有一个门禁系统记录着门禁的人员进出刷卡信息,门禁装有视频录像设备,现在要根据人员的刷卡时间调出其刷卡时间点前后一段时间的录像.关于视频回放部分具体实现过程较复杂本文不涉及,提一下其中涉及到的对时间数值的增减操作. 目标: 以时间格式的字符串“2015-01-01 00:00:00”为例,返回该时间点前30秒和后30秒的时间格式的字符串. 前端和后台其实都可以实现,只是方法不同而已. 后台(C#)实现方法: string str = "2…
一个 kobject 的其中一个关键函数是作为一个引用计数器, 给一个它被嵌入的对象. 只 要对这个对象的引用存在, 这个对象( 和支持它的代码) 必须继续存在. 来操作一个 kobject 的引用计数的低级函数是: struct kobject *kobject_get(struct kobject *kobj); void kobject_put(struct kobject *kobj); 一个对 kobject_get 的成功调用递增 kobject 的 引用计数并且返回一个指向 kob…
注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带参数安装服务的,在此感谢猿友KOFIP的指教和代码,详情请见回复. ------------------201506182056原文------------------ 市面上常见的安装一个服务的方法大概有这么几种: 用Process类调用sc.exe.Installutil.exe等外部工具进行安…
在win32下操作printer:   1)import win32print   2) 获得默认打印机名:          >>> win32print.GetDefaultPrinter()          'Canon LBP-800'   3)打开一个指定的打印机并获得其句柄          >>> handle = win32print.OpenPrinter('Canon LBP-800')   4)获得一个指定的打印机句柄所对应的打印机的信息    …
1 系统和当前目录 1.1 获取Windows目录 UINT GetWindowsDirectory( LPTSTR lpBuffer, //BUFF的地址  UINT uSize    //BUFF的长度 ); 例如: C:\Windows 1.2 获取System目录 UINT GetSystemDirectory( LPTSTR lpBuffer, //BUFF的地址  UINT uSize   //BUFF的长度 ); 例如: C:\Windows\System32 1.3 获取临时文件…
1 文件的创建或打开 HANDLE CreateFile( LPCTSTR lpFileName, //文件路径和名称 DWORD dwDesiredAccess,      //访问方式,最常用的值是GENERIC_READ,GENERIC_WRITE或两 个:GENERIC_READ|GENERIC_WRITE. DWORD dwShareMode,        //共享模式,FILE_SHARE_DELETE,FILE_SHARE_READ,FILE_SHARE_WRITE LPSECU…
https://www.cnblogs.com/Clingingboy/archive/2011/05/10/2042645.html…
实现数的原子性加减. 什么是原子性的加减呢? 举个样例:假设一个变量 Long value =0; 首先说一下正常情况下的加减操作:value+=1. 1:系统从Value的空间取出值,并动态生成一个空间来存储取出来的值: 2:将取出来的值和1作加法.而且将和放回Value的空间覆盖掉原值. 加法结束. 假设此时有两个Thread .分别记作threadA.threadB. 1:threadA将Value从存储空间取出.为0. 2:threadB将Value从存储空间取出,为0. 3:threa…
前面写了一个多线程报数的功能,为了描述方便和代码简洁起见,只输出最后的报数结果来观察程序运行结果.这非常类似一个网站的客户访问统计,每个用户登录用一个线程模拟,线程运行时将一个表示计数的变量递增.程序在最后输出这个计数的值表示今天有多少用户登录.如果这个值不等于我们启动的线程个数,那这个程序就是有问题的. 为了放大问题,能清楚的看到问题,把线程数设置为50,程序执行200遍,看程序执行的结果: #include <stdio.h> #include <process.h>//_be…