我有一个要求,我必须在套接字上写,然后从套接字连续读取响应和处理数据。 我已经创建了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