c++ - 线程接收空字符串

标签 c++ string pthreads

void *interpretWrapper(void* arg) {
    char* res = (char*) arg;
    cout << res[0] << endl;
}

void *recvConn(void * data) {
    char buffer[1024];
    int buffer_len = 1024;
    while(true) {
        memset(buffer, 0, buffer_len);

        if((bytecount = recv(*csock, buffer, buffer_len, 0)) == -1)  {
        printf("yalehwyyy\n");
        fprintf(stderr, "Error receiving data %d\n", errno);
        printf("%d", csock);
        break;
        }else if (bytecount == 0) {
            fprintf(stderr, "Socket Closed ! Robotino needs to reconnect !!\n");
            break;
        }

      pthread_t thread_id = 0;
      pthread_create(&thread_id, NULL, interpretWrapper, &buffer);
      pthread_detach(thread_id);
      printf("Received bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
   }
}

在上面的代码中,每当我收到一个放入缓冲区的字符串时,我都会在 recvConn 中打印该字符串,结果实际上就是发送的字符串。然而,一旦字符串被传递给 interpretWrapper,当我打印 res[0] 时我得到的只是一个空字符,而预期的输出将是发送字符串的第一个字符。我也试过使用字符串,也得到了一个空字符串。

此外,我尝试发送一个整数,而在 interpretWrapper 中打印该整数会正确生成传递的整数。我这两天一直在想办法解决这个问题,好像是什么问题?

最佳答案

父线程和子线程正在竞争:父线程继续 while 循环并在子线程查看缓冲区之前命中 memset(buffer, 0, buffer_len)。您可能想将拷贝传递给子线程。

关于c++ - 线程接收空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17171670/

相关文章:

c++ - 适用于大图的数据结构

c++ - Botan 库和 'compressed' 公钥

c - 如何通过在本地使用互斥变量来锁定线程?

c++ - 制作 cv::Mat 队列

c++ - 为什么我要把一个 vector 放在堆上?

string - 从 Excel VBA 中的字符串中删除 HTML 标签

regex - 如何修剪和替换字符串

php 用自定义替换数据替换数组

macos - Mac OS X pthreads 假返回地址

c - `pthread_t*` 的 `pthread_create` 参数需要存活多长时间?