我有一個要求,我必須在套接字上寫,然後從套接字連續讀取響應和處理數據。 我已經創建了2個類A和B. A有write()和read()api,B有processdata()api。 我創建了從A :: read()到B :: processdata()的回調。 但我正面臨着多線程問題,因爲我是新手。 線程讀取()api必須始終運行,但在處理B :: processdata()中的數據時,服務器正在發送一些更多的關於套接字read()的數據,這是我缺少的。 請爲這個問題提出一些設計,以便我可以保存數據,同時我的processdata函數可以完成它的工作,並且可以再次回讀以讀取數據(小例子)? 我想維護3個線程,每個寫1,讀取和processdata。但我不知道如何在完成processdata線程後重新讀取線程。多線程讀取和寫入服務器在c + +
對不起,很長的文章,但我會很感激,如果有人可以幫助我這個。
以下是我在我的項目中使用的非常高級的代碼設計。
//A.cpp
class A {
public:
void write();
void read(b* obj);
}
void A::write()
{
//code to write to socket
}
void A::read(b* obj)
{
//code to read from socket
// if data received call below function
obj->processdata(buffer)
}
//B.cpp
class B {
public:
processdata(buffer)
}
void B::processdata(buffer)
{
//code to processdaata from socket
}
//Main.cpp
int main()
{
A* objA = new A;
B* objB = new B;
objA->write()
while(1)
{
objA->read(objB)
}
}
爲什麼不能嘗試使用臨界區域?根據我的理解,你正在詢問線程同步嗎? –
您需要複製「緩衝區」的內容或使用多個緩衝區,以便在處理較早的數據時繼續接收數據。您必須有一些方法來存儲這些緩衝區,直到'B'能夠處理它們,同時讓'B'線程等待數據可用。 2線程之間的同步至關重要。 – 1201ProgramAlarm
@Akhil:請原諒我的天真,但您是在談論如何使用信號量/互斥鎖來保護我的緩衝區?我的問題是,在處理數據時,我阻止在套接字處讀取數據,因爲我的代碼正在處理數據。所以我想要爲創建多線程模型提供幫助。 你能幫我一個小例子嗎? – harry