none
VB6.0專案程式會突然間無法作動 RRS feed

  • 問題

  • 各位大大小弟又來麻煩大家了

    目前小弟有各以vb6.0 所寫出的一個專案是一個即時監控系統

    我在執行測試時會發生專案類似像當機一般lock住但是過一段時間後又會自行再啟動

    我查詢CPU使用率 異常狀態下:VB6.0=0 而 system idle proess=99

              正常執行狀態:VB6.0=33~36 system idle proess=63~67

    請位各位大大這是什麼原因造成的呢??

     

     

     

    2008年9月22日 上午 04:55

解答

所有回覆

  • 通常這是在等待某裝置回應,就不知道是資料庫還是你的其他硬體。

    2008年9月22日 下午 12:29
  • 我是用來監視PLC內部點位的現況還有即時資料庫寫入

    所以我在很多段程式中都有加入

    Code Snippet

    Do
       QueryPerformanceCounter nc
       If bDoEvents Then
          MyDoEvents
      End If
     Loop Until (nc - sc) > tf

     

     

    我之後有將一些拿掉

    目前系統等待與VB執行CPU大概各佔50%,似乎穩定許多

    目前仍在測試中

    2008年9月23日 上午 02:45
  • MyDoEvents ?

    那個 MyDoEvents ?

    若是精確度要求不高時,讓 Sleep 1 ,而非 Sleep 0 ,精確度要求高時,請比較華碩主機板跟其他主機板差異 (例如技嘉)

     

    2008年9月23日 上午 03:59
  • 感謝大大的提醒..我的模組是套用之前璉大所寫的程式

    目前測試下來..應該是我系統釋放點太多了..所以拿掉一些就穩定許多了

     

    2008年9月24日 上午 07:57
  • Code Snippet

    Public Function MyWait(ByVal mySecond, Optional bDoEvents As Boolean = True, Optional ByVal dwMilliseconds As Long = 0)
    ' 精確計時, 無 DoEvents 時最小解析度小於 0.1 ms, 有 DoEvents 時最小解析度小於 10 ms, 最大有效時距大於 244,951 年
       Dim sf As Currency, tf As Currency
       Dim sc As Currency, nc As Currency
      
       QueryPerformanceFrequency sf
       tf = sf * mySecond
      
       QueryPerformanceCounter sc
       Do
          QueryPerformanceCounter nc
          If bDoEvents Then
             MyDoEvents dwMilliseconds
          End If
       Loop Until (nc - sc) > tf
      
       MyWait = (nc - sc) / sf
    End Function

    Public Function MyDoEvents(Optional ByVal dwMilliseconds As Long = 1)
       MyDoEvents = DoEvents()
       Sleep dwMilliseconds
    End Function

     

     

    這是璉大在他的站裏分享的程式一部份

    所以我就在TIMER裡的程式結尾放入

    mywait(1)

    只是程式仍舊會不定時的停擺,在啟動

    2008年9月25日 上午 07:29
  • 以上面的 MyWait 來說,我的意思是:

    MyWait(1, True, 1)

    2008年9月25日 下午 05:07