Re: [問題] 多個使用者同時製作文件的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章