串列埠除錯心得 竟然是for迴圈惹的禍

2021-06-14 15:08:03 字數 685 閱讀 5454

在用com口連線機器時,傳送簡單的命令和小檔案都很ok的,可是在傳送乙個較大的檔案時,出現了問題。

後面開com口除錯工具portmon進行跟蹤,發現是機器回饋到com口的資料報不正確,致使分析這個資料報時,得出了錯誤的結論,認為檔案傳送失敗了。

於是開始思考是什麼造成的?經過分析,問題鎖定在檔案的切包傳送上(為了方便,直接用了for迴圈來傳送檔案的切包),難道是傳送的太快,造成下端機器無法快速處理?於是在發包的迴圈中加入了sleep。可是sleep一直提公升到了3秒依然沒有作用,所以漸漸覺得問題可能不是在這邊。

這時,想到com口操作其實在根本上是檔案操作(看com口的api就可以知道),所以如果說回饋的資料報不正確,有可能是com口對應的檔案出了問題。但是仔細一想,又不太可能,因為這是系統級的,不可能這麼輕易的就出了問題。

又想了很久,最後想著,要不就不用for迴圈,另外開個執行緒來傳送。果斷用執行緒傳送,結果真的就成功了。不但發的ok,收的也ok。於是反過來想,執行緒操作是為了時間片更好的分配,而剛剛的for迴圈裡也用了sleep來讓主線程去分配時間片,為什麼會不行?

再看看**,原來for是在主線程中,而for是序列執行的,所以即便sleep了,也是讓主線程sleep,並沒有起取真正分配時間片的目的,而執行緒卻的sleep是真正的騰出了時間片讓主線程去分配。

同時,由於for的序列執行,使得資料會持續的送往下端,而負責抓取com口回饋的執行緒沒時間去抓取。

Object Pascal與C 竟然是相同的!

object pascal與c 的相同之處!竟然這麼相同,包括相似的程式結構 而且,object pascal的語法竟然比c 還嚴格 怪不得borland能把object pascal和c 能混用 我看到以前有人說要把delphi中的vcl用c來寫,其實根本沒這個必要,這個vcl很容易地就可以轉成用...

銷售的最高境界竟然是聊天

銷售 聊天。1 真正的銷售是乙個愉快的聊天過程 聊對方的心願 聊對方的擔憂 聊如何完成對方的心願 聊如何拿走對方的擔憂。2 真正的銷售沒有對立的立場,沒有買方沒有賣方。3 真正的銷售是全心地為對方解決問題。4 真正的銷售不需要說服對方。5 真正的銷售彼此沒有壓力。6 真正的銷售是我們說的是對方想聽的...

震驚 python中的異常竟然是這樣的

在我們日常的程式設計過程中,經常會出現報錯的情況,那鮮紅的顏色讓很多的程式猿心慌慌,寫碼一小時,找錯一整天,所以今天我們就來細緻的講解一下程式執行中的異常報錯,讓我們不在恐懼那小小的程式報錯 error 首先我們得知己知彼,才能百戰不殆 當程式在執行 現的錯誤,或邏輯語法出現問題,直譯器此時無法繼續...