c++ socket编程中的多线程处理问题? 70

WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSASt... WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(1, 1);

err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return 0;
}

if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1) {
WSACleanup();
return 0;
}
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(30000);

bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

listen(sockSrv, 5);

SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
char recvBuf[50];
int state = 0;
//上面的代码可忽略

while (1)
{
memset(recvBuf, 0, sizeof(recvBuf));
recv(sockConn, recvBuf, 50, 0);
if (!strcmp(recvBuf, "wup")){
state = 1;
fun(state); //example

}
...
}

我想另开一个线程 响应state, 主线程可以根据客户端发来的字符串信息改变state,另一个线程完成相应动作,请问另一个线程代码怎么写
假设有这种情况 传入state=1时,另一个线程会重复a操作,但一旦传入state=2,a操作就停止了,执行其他操作,请问代码怎么写
展开
 我来答
百度网友bc61304
2014-10-29 · TA获得超过1902个赞
知道小有建树答主
回答量:875
采纳率:0%
帮助的人:563万
展开全部
你说的有点没看明白,这样的代码结构应该可以吧。不过不会state一变化就停止a操作,一次a操作的流程要执行完,在下次进入循环的时候才会转去执行其他操作。

while() //死循环
{
if(state == 2)

{
//执行其他操作
usleep();//如果没有其他操作,可以睡眠一段时间 比如10ms。
contunue;

}
// a操作

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式