none
關於DLLIMPORT問題 RRS feed

  • 問題

  • 各位先進好

    小弟目前遇到一個問題,關於以DLLIMPORT的方式呼叫廠商提供的FUNCTION.

    廠商提供的DLL主要是在做與他台主機做SOCKET溝通的動作。

    當進入他的FUNTION以後是否有方法在限定時間內無回應就讓我的程式繼續走下去,(也就是中斷現下的動作)。

    希望提供一些方向。

    謝謝。


    2011年10月6日 上午 10:07

解答

所有回覆

  • 用多執行緒來呼叫該function , 然後用個Timer計算Timeout 就把Thread關掉.

    不過這樣有可能會引發該function 產生錯誤,  你得自個兒試試看.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年10月6日 上午 10:17
    版主
  •  

    如果當unmanaged code正在執行 ,在managed thread呼叫Abort, ThreadAbortException 會等到該執行緒回到managed code才會丟出

    因此想在manage code中斷正在執行的unmanage code是不可能的

    替代方式是用 Win32 APIs CreateThread(), WaitForSingleObject() 和 TerminateThread(). signatures 參考 這裡.

    這畢竟有風險, 還是跟你廠商溝通, 能夠提供中斷的控制,  或是廠商提供設定timeout

     

    http://stackoverflow.com/questions/2781484/abort-call-to-unmanaged-dll

     

     


    Myblog: 松露筆管麵
    • 已標示為解答 無病呻吟 2011年10月7日 上午 07:07
    2011年10月6日 下午 12:43
  • 看起來我原先的說法是有誤, Sorry.

    如果你想要更精確掌握通訊的話, 請廠商直接提供通訊協定的格式文件給你, 直接用.Net 重寫一份通訊底層.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年10月6日 下午 03:47
    版主
  • 感謝諸位,

     

    我試著利用Abort的方式來進行中斷的動作,程式進入unmanaged時,

    的確是還是得等控制權回Managed(正如神來之筆前輩說的) 。

    那小弟還有一個疑問,若採取WIN32 API此方式。

    有可能造成的風險是?

     

    至於廠商部分已有溝通,但看起來得自己解決的機率極高。

    謝謝

    2011年10月7日 上午 02:36
  • 請問該function 會run很久嗎?

    您的程式需要取回他的回傳資料嗎?

    感覺請配合廠商加個timeOut設定會來的快些!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年10月7日 上午 03:46
  • 所謂風險大概就是廠商的程式進行到一半, 可能正開啟物件或檔案
    你中途給他強制關閉, 造成成記憶體沒回收, 或是檔案壞掉,
    以上是個人猜測, 這部分你要跟廠商詢問才能進一步得知
    Myblog: 松露筆管麵
    2011年10月7日 上午 05:49
  • 謝謝各位

      目前小弟是採用神來之筆前輩提供的方式,

      那的確如何看都還是請廠商加上這個timeout機制會比較妥當。

      不過還是先做起來放比較安全。

    謝謝大家 

    2011年10月7日 上午 07:14