作者yauhh (哟)
看板Programming
标题Re: [问题] 多个使用者同时制作文件的问题
时间Tue Dec 6 09:07:28 2011
※ 引述《kovenkoven (小沃)》之铭言:
: 各位好
: 最近手边在修改一个程式
: 功能是在网路上填好资料後可以产生一份word的报告书及PDF
: 但是在测试的时候遇到一个问题
: 当使用者同时超过3人在同一个瞬间(须非常相近)产生文件有机会让程式卡住
: 大约四个人可能会有一个人卡住
: 而卡住的word、excel、还有进行制作报表的程式就会一直留在系程序统内
: 在产生文件前会先将样本复制一份副本各自使用
: 网页是使用PHP的system函数去呼叫VB的程式制作报表
: 而system呼叫的程式是在背景执行,所以不知道究竟是死在制作中的哪个步骤
: 用人工测试同时多人执行制作报表的程式又都很顺利
: 虽然说以使用系统的人数来说这个机率不高,但是还是想把问题排除
: 请问各位像这样的问题该往哪个方向除错?
: 还有若是发生卡住的状况,如何自动kill掉当掉的程序?
: 感谢各位
可以先拆开检查二段:一段是确认PHP system函数呼叫VB程式是不是产生二个以上
的执行实体,另一段是确认VB程式同时叫出Office application是不是互卡.
最有可能的是VB了. (VB6?) 如果没有加 DoEvents, 就要等每个程式卡完.
不过就Office自己,就很有可能发生自己互卡的情况. 我曾经有很多次手动操作Office
遇到自己互卡的情形,都要开工作管理员把卡住的程序删掉.
可以考虑选用多种解法:
1. 补救解法: 每次执行,先让VB叫出WinAPI,把执行中的Excel,Word删掉.
2. 傻方法: 把VB (VB6) 弄成一个单一实体常驻程式,每次要呼叫Excel,Word工作时,
就要设定等一段固定的秒数才可以让下一个Excel或Word工作执行. 然後PHP的角色
就是要对这个VB程式送讯息.
或者是让VB (VB6)以多实体方式执行,只是第二个实体起来的时候将指令传给
第一个实体,然後自己关掉.
3. 釜底抽薪: VB (VB6?) 实作工作伫列,伫列的每个工作必须要做到执行完,让Windows
对VB放讯息回来. 所以要用到WinAPI的notification方面的函数.
--
/yau
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.65.211