Re: [問題] 多個使用者同時製作文件的問題

看板Programming作者 (喲)時間13年前 (2011/12/06 09:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1EtMhLT_ (Programming)
文章代碼(AID): #1EtMhLT_ (Programming)