昨天遇到一個奇葩的問題,服務器正常運行但經常出現客戶端無法連接的問題。我很好奇,在accept返回的地方斷點,發現無法accept了。這就怪了,以前從沒出現過這種情況。服務器網絡用的asio,無法accept應該就是線程阻塞了,我暫停查看了一下所有線程,發現服務器在收到一個鏈接的時候,暫停了。暫停的地方是printf,連接成功之后寫日志,順便寫到控制台了一份,竟然在printf暫停了。這。。人與計算機之間最基本的信任呢!!我把線程數量減少到1個,仍然有這個問題,但是關閉printf之后就不會有這個問題了。
今天在調試另一個問題的時候,發現程序的標題有點奇怪。“選擇:xxx.exe”,“選擇”是什么意思?我仔細一看,原來在win10下面你只要點一下控制台窗口的內容,就會進入選擇模式,鎖住了屏幕,相當於阻塞了主線程。這用戶體驗做的真到位,windows果然還是不適合做服務器開發!!
