gpt4 book ai didi

c - 使用线程时 printf 无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:40 25 4
gpt4 key购买 nike

您好,在使用线程时 printf 有一个小问题。问题是终端稍后打印一条 printf 语句,该语句应该更早打印。这是我面临这个问题的部分。

.
.
.
while(1){

printf("waiting for a connection\n");

csock = (int*)malloc(sizeof(int));

if((*csock = accept( hsock, (struct sockaddr*)&sadr, &addr_size))!= -1){
printf("---------------------\nReceived connection from %s\n",inet_ntoa(sadr.sin_addr));
client_counter++;
pthread_create(&thread_id,0,&SocketHandler, (void*)csock );
}

else{
fprintf(stderr, "Error accepting %d\n", errno);
}
}// end while
.
.
.

这是线程使用的函数。

void* SocketHandler(void* lp){

int *csock = (int*)lp;
char buffer[1024];
int buffer_len = 1024;
int bytecount;
char* str_exit="exit";

while(1){

memset(buffer, 0, buffer_len);

if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
exit(0);
}

if(strcmp(buffer,str_exit)==0){
break;
}

printf("Received bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
strcat(buffer, " SERVER ECHO");

if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
exit(0);
}

//printf("Sent bytes %d Sent String %s\n", bytecount,buffer);
}

printf("Client disconnected\n");
free(csock);
return 0;
}

每当客户端(线程)连接到服务器时,输出都是这样的。

waiting for a connection
---------------------
Received connection from 127.0.0.1
waiting for a connection
Client disconnected
---------------------
Received connection from 127.0.0.1
waiting for a connection
Client disconnected

当第一个客户端连接时,输出工作正常,但是当第二个客户端连接时,字符串 "waiting for a connection" 出现在 "Received connection" 之后。那么它应该以对比方式工作。如果你能提供帮助我会很高兴,无论如何谢谢

最佳答案

没有问题。除了第一次进入循环外,“等待连接”将是客户端连接后接受线程打印的最后一件事。

换句话说,这个循环开始/结束于 accept() 调用,除非是第一次进入。这是第一次通过是“异常”,而不是后续循环。

关于c - 使用线程时 printf 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com