| 钢's profile江南西道PhotosBlogLists | Help |
|
|
November 15 奇怪的 ACE_High_Res_Timer本来普通定时器用着挺好,但想试试这个高精度的定时器,结果发现十分钟的超时间隔,八分多钟就触发了,偏差的幅度倒是很固定。 之前没找着问题的原因就只好继续用普通定时器,但最近无意之中发现这个问题在公司的台式机上不存在! 然后就多试了几台机器,同样的程序,在公司台式机和服务器上运行都是好的(准确定时),在家里的两台笔记本上却都有问题(提前超时,加快的比例完全一致)。 尝试过不使用默认的 ACE_WMFO_Reactor,改用 ACE_Select_Reactor,尝试了版本新一些的 ACE 5.7.1(原来的是 5.6.1),问题依旧,另外,也基本排除了开发环境的原因(VS2005SP1 加上在线更新的一些补丁)。 难道是 CPU 的种类有关系?因为公司两台机器都只是有超线程技术的单核奔四,家里两台都是之后出的酷睿/奔腾双核。 简单看了下 ACE 中相关的处理代码,感觉问题有可能出在 global_scale_factor 的获取上面。虽然 ACE_High_Res_Timer 背后使用的都是各个系统提供的高精度定时器,但由于不同系统间的差异,使用的时候涉及到一个修正的问题。 跟踪运行了一下相关代码,大致流程:先 QueryPerformanceFrequency,结果是 3579545,然后除以 1000000(1秒内的微秒数)再取整,就得到 global_scale_factor 的值了,在我这也就是 3,和未取整前的数值 3.579545 之间的比例和我问题中的误差比例(10 分钟变成 8 分 20 秒左右)非常接近。 再然后就不知道该怎么办了,网上也查不到相关的讨论,不知道是不是我的用法有问题:( 另外,还找到一篇也是抱怨 ACE_High_Res_Timer 的帖子,虽然和我的问题不太相干,但更坚定我继续使用普通定时器的决心了。。。 May 15 折腾 log4cxx @ MinGW+MSYS 未果折腾了好些天也没搞定,还走了不少弯路,留个笔记吧,数字为实验步骤,字母为参考资料,我使用的 MinGW/MSYS 版本分别为 5.1.4 和 1.0.10。 a. http://wiki.apache.org/logging-log4cxx/MSWindowsBuildInstructions 1. cppunit 1.12.0 & libiconv 1.11 ok c. file:///D:/apache-log4cxx/site/building/autotools.html 5. get apr from svn –> ./buildconf needs autoconf d. http://ffmpeg.arrozcru.org/wiki/index.php?title=MsysDVLPR 8. m4-1.4.12 ok -> copy to /bin f. http://www.nabble.com/Installing-Autoconf-2.63-on-MinGW-td20884749.html 11. m4-1.4.7-MSYS -> extract to /local/bin g. http://www.mingw.org/wiki/msys 14. remove perl-5.6.1-MSYS-1.0.11-1 –> use AP (active perl) again Traceback (most recent call last): 24. get apr 1.3.3 -> failed to make -> error: syntax error before "LPPROCESSENTRY32W" h. https://issues.apache.org/bugzilla/show_bug.cgi?id=46175 25. apply the patch file (partial) to apr_svn or apr 1.3.3 –> failed still –> syntax error before "LPPROCESSENTRY32W" Hunk #1 FAILED at 238. i. http://www.mail-archive.com/dev@apr.apache.org/msg21183.html 26. ./configure with a WINVER definition -> failed still… xx. How to use Copy & Paste in MSYS: April 21 编译 Qt 的 MySQL 驱动 @ Windows0. 网上相关的资料并不少见,但我实际操作的时候还是走了一点弯路,所以整理一下吧,相关软件的安装情况:Qt 的安装目录为 D:\Qt\2009.01,自带 MinGW;MySQL 的安装目录为 D:\MySQL Server 5.0。 1. 下载 mingw-utils,将其中的 reimp.exe 放到 Qt 自带的 MinGW 的 bin 目录下。 2. 在 C 盘下建一个 mysql 目录,将 MySQL 安装目录下的 include 和 lib 目录复制过去,如果不这样做的话,后面步骤 4 里的包含路径会不太好写,至少我没试出来该怎么写:( 3. MySQL 自带的 .lib 文件是为 VC 准备的,所以先要生成 MinGW 能认识的 .a 文件: 4. 编译 Qt 的 MySQL 驱动: March 29 IE8 和 VS2005 有点冲突主要是在通过向导添加方法或变量的时候会报脚本错误。 解决方法:运行注册表编辑器,打开 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet March 08 折腾 Eclipse + QtEclipse 是刚从官网上下载的 eclipse-cpp-ganymede-SR2-win32,版本应该是 3.4.2 吧,Qt 也是最新的 4.5(qt-sdk-win-opensource-2009.01.1.exe),同时从 Qt 官网上下载了集成到 Eclipse 的插件:qt-eclipse-integration-win32-1.5.0.exe。 安装步骤:Qt 先安装好(内置安装了 MinGW),然后在系统的环境变量 PATH 里设置了 Qt 和 MinGW 的 bin 目录,再解压缩 Eclipse 到某个目录,再安装 Eclipse 的 Qt 插件(需要设置 Eclipse 的路径和 MinGW 的 bin 路径)。 然后就可以运行 Eclipse 了,随便新建一个项目,Build 没问题,但调试有问题,按理应该是选择 MinGW 的 gdb Debugger ,但选择这个后下边的 Debugger Options 都是空的,填进去也不能保存,时不时还出个 NullPointerException,如果选择其它的 Debugger,出来的调试效果又不太对,反复重装几次后问题依旧,整得我很没脾气。。。 和 szf 同学确认了下安装步骤,应该是没啥问题,然后他让我换用他那个 eclipse 版本试试,这个是叫 eclipse-cpp-ganymede-SR1-win32.zip,版本比我前面那个稍早,重新按上面的步骤来了一次(Qt 不动),居然就没问题了,我倒! 题外1:之前也折腾了好一会和 Visual Studio 2005 的集成,碰到的问题是在 Link 的时候会说找不到如 qtmaind.lib 等,看了看 Qt 的安装目录,下面确实没这些文件,然后才反应过来,安装包里集成的应该都是为 MinGW 准备的动态链接库,如果要和 VS 一起用,应该得重新编译一下了,找到安装目录下的 INSTALL 文件看了看,启动 VS2005 的命令行窗口,切换到 Qt 的目录,先 configure 再 nmake 一下就好了,nmake 这步花了好几个小时,完成后 Qt 的安装目录大概是 7G 不到一点,无数个 tmp 目录下的临时文件删除掉可以节省不少空间。 题外2:折腾期间我的 VS2005 也部分罢工了,启动时说 Package Load Failure,具体内容是说 Windows Form Designer Package 不能正确加载,然后我的 Properties 窗口里面就只有一些常规的属性设置了,Events/Messages/Overrides 都消失得无影无踪。最后只能通宵下载了一张安装光盘镜像,才算是修复好。。。 题外3:昨下午我们几个晃悠到鸟巢那边去参观参观了,看下来的主要感觉:灰尘太多,有待清理。。。照片仅供参考,因为手机上的相机太差。 January 06 升级 Trac : 0.10.4 –> 0.11.2.1直接运行官方网站上下载新版本的安装包,然后脚本升级项目文件夹,报错: trac-admin /path/to/projenv upgrade 查了一下,pkg_resources 是 setuptools 里面的,下载并执行下面的脚本文件就可以安装好 setuptools: 继续升级项目文件夹,还是报错: 继续查,可能是要设置环境变量 PYTHONPATH 之类,照着设置后无效。 试着用 setup tools 来安装 Trac(执行 easy_install Trac 就可以,似乎还自动安装了 Genshi),仍然无效。 想着之前是直接安装的新版本,猜想会不会是旧版本文件未删除干净的原因,于是手动删除所有 Trac 相关文件夹下的内容,安装并卸载旧版本,再重新安装新版本,然后注意到现在 Python 的 Scripts 目录下没有 trac-admin.py 了,只剩下 trac-admin-script.py,直接执行这个脚本,居然 OK 了。。。看来之前的问题就是因为执行的还是旧版本的脚本文件,奇怪了,为啥要改文件名? 继续 trac-admin-script /path/to/projenv wiki upgrade,更新 Trac 自带的 wiki 文档(除了首页)。 新版本内置了之前没用过的 WebAdmin,给用户添加 TRAC_ADMIN 权限后就可以在界面上看到(permission add username-from-htpasswd TRAC_ADMIN),使用起来方便不少。 还装了个用户认证的插件 AccountManager,但不太会用。。。有空再研究吧。 December 30 VC2005 的程序文件分发问题及解决参考:http://blog.csdn.net/liguangyi/archive/2006/06/01/767396.aspx 但我这边 Debug 版本还有问题,装了 vcredist_x86.exe 也跑不起来,用 Dependency Walker 看依赖的 dll 似乎也不缺,奇怪。 Update @ 09/03/31: October 05 大家来找茬~作弊器嗯,QQ 游戏里面的大家来找茬,LP 在玩的时候,俺如果路过很可能会被抓去,于是。。。就有了这个作弊器(下载地址1,下载地址2)。 好久没碰 GDI 了,很有点陌生,前后差不多两天时间才完成,测试不多,应该还是挺好用的:等要找茬的图片显示完整后(不要被其它窗口盖住),点击作弊器里的“给我找起来”或者用键盘输入 Ctrl+F2,结果会缩略显示在作弊器窗口里,按图索骥即可,想偷懒就直接在作弊器里点击。 好吧,我承认我有点无聊。。。如果喜欢这种游戏,那就别用作弊器啦,除非你十分肯定对方也在用作弊器:)
后记:本来是准备在网上找个现成的,但随便抓了几个似乎都不太好用,只好自己动手,但刚才换个关键字就又搜出来不少,功能似乎都还很强,俺这个只相当于人家免费奉送的最低级的“傻瓜找茬”功能:) September 11 数据库驱动中的连接池设置导致的怪问题程序运行过程中如检测到数据库连接已断开,将重新进行连接,代码中是对 Connection 先 Close 再 Open,但奇怪地是明明已经把数据库服务器停掉了,Open 操作仍然成功(未抛出异常),更奇怪的是有几次单步跟踪时就没这个问题。。。然后注意到单步跟踪时如果在 Close 后多等一会再 Open 就正常,才想到可能是连接池之类的因素在里头起作用。程序通过 ADO 连接 MySQL,起作用的应该是 Microsoft OLE DB Provider for ODBC Drivers,然后查到这个: Connection is not closed in given scenario due to using one of pooling types - oledb 连接池对我的程序来说没啥意义,就照着说明把注册表里的键值改为 0xfffffffe,果然 ok 了!如果不改注册表,单从程序代码上应该也有办法解决,有空再研究吧。 August 21 被防火墙阴了...昨天下午调试程序,程序启动时会监听端口A和端口B的UDP消息,也会定期从端口A往其它机器发送UDP消息,而其它机器回复的UDP消息有可能发往端口A或端口B。我碰到的问题是,如果从端口A发,那回复的UDP消息中只有发往端口A的能收到,如果从端口B发,就只能收到发往端口B的UDP消息。 然后今天才发现收不到的UDP消息原来是被系统自带的防火墙给挡了,囧。。。监听UDP端口时,系统防火墙不会有询问是否加入防火墙规则,也就是默认阻挡,但一旦有UDP消息从某个端口发出去,则从那个端口进来的UDP消息也是可以通过的。这个好像叫UDP Tunnel之类的吧,之前应该看到过一些相关的介绍。 May 10 gVim 不错配上 taglist、grep、winmanager、minibufexpl 等扩展,加上 win 版的 ctags、grep 等执行程序,目前来说,至少看看代码的效果还是不错的:) 推荐参考文章:《手把手教你把Vim改装成一个IDE编程环境》! 另外,我现在是用这个来看 VB6 的代码,而 ctags 不太认识 VB6 的代码,需要 写一个 ctags.cnf文件 放到 ctags.exe 所在目录: --langdef=vb 这样之后 ctags -R 的时候就会正常工作了。 然后在 _vimrc 中 加上一行针对 VB 的 taglist 设置,例如: let tlist_vb_settings = 'vb;s:sub;f:function;c:const;v:variables' 碰到过有个 .frm 文件老是不能自动识别出文件类型,然后查到 filetype.vim 中有段脚本是根据文件的前五行有没有几个 VB 代码特有的关键字来判断是不是 VB 的文件,但我这个文件前面有好几行是引用的 ocx 控件信息,而 filetype.vim 要找的信息在第七行,呼呼呼,直接给加上了几个 getline 搞定。。。 看来我的《寻找记事本》又有个强力的候选者了,本来以为 gVim 只是简单地将 vim 移植到 windows 平台而已,但试用下来发现还是有不少适应 windows 平台的改进,不错,不错。 April 05 log4cxx 0.10.0 出啦邮件列表中看到折腾了七八个 RC,终于发布了近四年来的第一个 release。。。 编译过程需要使用稍早时候出的 cpptasks 的 1.0b5 版本,不过下载过来的压缩包没有包括编译好的 jar 包,需要自己用 Ant 来 build 一下。 apr 和 apr-util 不像以前那样是自动下载并解压,需要自己下载并解压至 apache-log4cxx-0.10.0 的同级目录(或者在 build 时加参数指定位置也行),我分别用的是 1.2.11 和 1.2.10 版本。 build 前先运行一下根目录下的 configure.bat(采用 win 版头文件)和 configure-aprutil.bat(禁用 APR-Iconv 和 LDAP),内容很简单,手工操作也可以。 直接使用 vc9 的 command prompt,将 ant-contrib 和 cpptasks 加入 CLASSPATH(或者直接扔到 Ant 的 lib 目录下也行),然后就可以请出 Ant 了,build 选项和之前稍有些不一样,详细可以看 usage,我这边用的主要是 -Dlib.type=shared 变成了 -Denable-shared=yes(缺省就是共享库),-Dhas.wchar_t=0 变成了 -Denable-wchar_t=0。 用 vc9 还算顺利,用 vc8express 编译出了点问题,提示找不到 windows.h,应该在哪设置一下或者改一下配置文件就行,但这套 java 的东东也不怎么熟悉,先不管了。。。 其它配套软件版本:JDK 1.5.0.14 Ant 1.6.5 Ant-Contrib 1.0b2。 分别编译了 debug 和 release 的 dll,产生的中间文件居然有四百多兆,似乎比大半年前的版本大了几倍,多了些啥呢。。。 December 22 windows 上安装 trac网上介绍 trac 安装的帖子还不少,先照猫画虎安装上 python 及相关的一些小软件(详细列表见后)。 命令行窗口中切换到 python 的 script 目录,运行 ..\python.exe trac-admin d:\projects\test initenv,输入相关参数(项目名称随意、数据库连接信息缺省、版本工具缺省、版本库位置照实、样式缺省),提示 Failed to create environment。 traceback 的最后是: 貌似是 sqlite 这块有点问题,折腾了好一会,最后才发现是 pysqlite 的版本太新,从 2.4.0 降到 2.3.5 就ok了! 现在安装的相关软件有: python-2.4.4.msi 机器上本来安装的 subversion 和 tortoisesvn 都是 1.4.4 的,apache 是 2.0.59。 mod_python 安装时需要选择一下 apache2 的安装目录,会自动将 mod_python.so 复制到 modules 目录下,然后在 httpd.conf 中加上: LoadModule python_module modules/mod_python.so <Location /trac> 然后 http://127.0.0.1:1080/trac/foo 就能访问相应的项目页面了,简单的用户验证可以使用: <LocationMatch "/trac/[^/]+/login"> 进一步的配置和使用有空再来了解。 September 18 CIA XPSuite 控件的打包转载自这里,试验了一下,貌似是可以的,有待进一步的检验。 // 之前都没有打包过那几个support dlls。 When creating a setup to install your application, such as InstallShield, make sure you configure the OCX and Support DLL files as self-registering so that during installation of your application, these files will be registered. Simply copying the files to a computer will not work. ...... The following files are required when distributing an application which uses XPSuite 2.0 The Support DLLs: ciaXPRegSvr20.DLL - Support file The Controls: ciaXPButton20.OCX - XPSuite XP Style Command Button Control Version 2.0 后记:还是不喜欢ActiveX的控件... July 17 如何修改SVN中已提交的日志直接在TortoiseSVN中修改过往日志,会提示: DAV request failed;it's possible that the repository's pre-revprop-change hook either failed or is non-existent 因为SVN库中的日志本身是没有进行版本管理的,为防止误操作导致原日志信息丢失,所以缺省禁止对其进行修改。如果要能在客户端进行修改,必须在repository的hook目录下新建一个pre-revprop-change.bat,内容如下: if "%4" == "svn:log" exit 0 在属性修改前,该脚本会被执行,如返回0即表示同意修改。另外,注意该目录下本就有一个pre-revprop-change.tmpl,但那个是xNix的shell脚本,windows平台貌似不太好用。 然后在客户端就可以正常修改了,其后台应该是调用类似下面的命令: svn propset -r N --revprop svn:log "new log message" URL 也可以在服务端通过运行下面的命令来做同样的事情,其中FILE是保存新日志信息的文件路径: svnadmin setlog REPOS_PATH -r N FILE 如果不新建上面那个hook,就只能在服务端用svnadmin来修改,在上面的命令后加上--bypass-hooks就行。 June 21 载入java vm时windows出现错误3InstallAnywhere制作的网站安装包,卸载的时候提示完标题中的错误信息就退出了,茫然。 考虑到之前更新过机器上的jdk版本,在卸载执行文件所在文件夹中找到一个Uninstall xgweb.lax文件,其中就有如下的条目: lax.nl.current.vm=C:\\Program Files\\Java\\jre1.5.0_06\\bin\\java.exe 正是我已经卸载的jre版本,直接修改成现在用的jre1.5.0_10,再次卸载就成功了:) update: 还是这个安装包,有时在安装的时候也会报同样的错误。 同样的,安装程包会在运行后自解压至系统临时目录下(比如I1183597230),其中的Windows目录下包括一个.lax配置文件,并包含如下的条目: lax.nl.valid.vm.list=J2 J1 MSJ 推测1.5应该不算在这个列表里吧,那应该装一个1.4的JRE就行了,有时间再试。 January 23 Log4cxx中的RollingFileAppender如果是比较老的0.9.7版本,使用如下的配置文件就OK: 如果是直接从版本库中取出的head revision,上面的配置文件就不起作用了,超过指定大小也不会roll,但使用xml格式的配置文件是没问题的,如: 试着仿照上面的内容写了一个properties文件,仍然没有roll的效果,原因不详。 后续报导: November 29 [整理] 用VC++通过Automation操作Excel表0. 本文针对VC++ 6.0和Excel 2003的组合,其它版本应该类似。
微软KB中的一篇总括性的文章,对VC++中使用Automation的几种方法及一些相关问题进行了说明,其中也链接了一些实际操作的代码,如数据的批量导入导出等,都是针对使用MFC的方法,而下面这篇对于了解一些背后的原理会有所帮助:
2. 相关的VBA文档,比如对象、方法及常量等的定义,可以查看Office安装目录下的“OFFICE11\2052\VBAXL10.CHM”,如果找不到,运行Office的安装程序,选择应用程序的高级自定义,将Office共享功能中的Visual Basic for Applications及其帮助都选上就有了。
3. 生成Excel表时,如果要设置单元格的样式为文本,可以调用Range对象的SetNumberFormatLocal方法,参数是COleVariant("@"),这个地方折腾了我不少时间,起先总以为是设置Style什么的,好一会也没弄明白,后来是利用Excel的宏功能,将设置单元格样式的操作记录成VBA程序,才得到如上的方法,其它类似问题应该也可以类似处理。
4. 关于Excel表中有数据的单元格范围,可以对一个已打开的Range对象调用GetCurrentRegion方法来得到。
5. 用完后(包括碰到异常)别忘记调用_Application的Quit方法,不然进程列表中要有一堆EXCEL.EXE了:)
x. 天真是冷啊,打字困难ing...考虑开空调了。 October 28 卸载不了Feb 2003版本的PSDK (已解决)这个版本的PSDK是以网页形式进行安装和卸载的,今天为了装IE7,将家里机器的Windows 2003升级到了SP1,然后打算将PSDK也对应升级一下,才发现这个问题,一打开卸载页面就会提示说“Object doesn't support this property or method”,而页面上的卸载按钮也是无效的,还没查到解决方法,郁闷了:(
后续报导:
发现安装新版本PSDK时会自动卸载旧的版本,俺真是土人多虑了... |
|
|