Socket非同步傳送的同步控制

2022-07-05 16:06:08 字數 727 閱讀 8033

在網路通訊中,我們使用socket非同步傳送資料,但在客戶端,往往是需要等待伺服器的返回結果後(握手過程)再往下執行,這就涉及到同步控制了,在多次的實現中,使用autoresetevent,實現不,即有時候發現,socket資料返回比阻塞的ui執行緒快,不知道是socket的優先級別高,還是什麼原因。總之,這個同步控制是失敗的。後來經研究,想到了解決辦法,只要傳送執行緒和接收執行緒同時對threadsemaphore進行操作,傳送資料時呼叫wait方法,收到socket返回的資料時呼叫set方法,問題解決。對於訊號量的同步控制有很多場合的應該,不同的場合可以設計不同的實現。看了很多的實現,都是需求相對複雜的,而我的需求就是阻塞ui執行緒,等待伺服器返回結果後再往下執行,所以只能參考別的實現,自己設計(下面程式沒有經過測試,只是乙個即時設計)。

public class threadsemaphore

bool m_issocketreturn;

public bool wait(int timeout)

lock(this)

if (!m_issocketreturn && !monitor.wait(this, timeout)

retun m_issocketreturn;

retun m_issocketreturn;

pulic void set()

lock(this)

m_issocketreturn = true;

monitor.pulseall(this);

非同步SOCKET與同步SOCKET

windows 套接字在兩種模式下執行 i o操作,阻塞和非阻塞。在阻塞模式下,在 i o操作完成前,執行操作的 winsock 函式會一直等待下去,不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,winsock 函式無論如何都會立即返回。windows sockets 的非同步選擇函式 w...

Socket 同步與非同步

1.所謂同步,可以理解為在執行完乙個函式或方法之後,一直等待系統返回值或訊息,這時程式是出於阻塞的,只有接收到返回的值或訊息後才往下執行其他的命令。非同步,執行完函式或方法後,不必阻塞性地等待返回值或訊息,只需要向系統委託乙個非同步過程,那麼當系統接收到返回值或訊息時,系統會自動觸發委託的非同步過程...

Socket通訊之同步與非同步

1 所謂同步,可以理解為在執行完乙個函式或方法之後,一直等待系統返回值或訊息,這時程式是出於阻塞的,只有接收到返回的值或訊息後才往下執行其他的命令。非同步,執行完函式或方法後,不必阻塞性地等待返回值或訊息,只需要向系統委託乙個非同步過程,那麼當系統接收到返回值或訊息時,系統會自動觸發委託的非同步過程...