gpt4 book ai didi

c++ - 如何将缓冲区中的数据复制到内存中的某处(char *)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:15 25 4
gpt4 key购买 nike

int str_len = read(m_events[i].data.fd, buf, BUF_SIZE);

我有这个,我将数据读入声明为 like 的 buf

char buf[BUF_SIZE];

我正在尝试做的是,我正在尝试获取数据并将其交给我定义的 WorkHanndler,无非就是一个线程池。

函数是

void ServerManager::addWork(int sender, char *data){
Work* work = new Work(sender, data);
m_workHandler->addWork(work);
}

所以我需要一个指向我刚刚读取的数据的字符指针。由于缓冲区被定义为数组,因此我无法将其传递给函数。

此外,你们认为这在服务器设计方面是个好主意吗?我正在从缓冲区读取数据并且不解析它,只是将原始数据交给线程池(插入队列)。线程池有一个队列,五个独立的线程通过互斥锁和条件变量竞争从队列中获取作业。完成作业后,单独的线程会将结果写入输出缓冲区。如果它有缺点,请告诉我,你们有更好的主意。提前致谢。

最佳答案

我现在看到的唯一可能的缺陷可能在 Work 类内部:确保它立即在构造函数中创建自己的缓冲区内容拷贝,因为一旦新数据到达,它将被覆盖。除此之外,它应该按预期工作(如果没有具体的工作就很难判断,等等)。

当需要指向数组元素类型的指针时,使用数组也不应该有问题,因为数组本质上只是一个指针(代码方面):

char data[1024];
char *pdata = data; // now data as well as pdata point to the first element
// data[0] is the same as using *(pdata + 0)
// data[1] is the same as using *(pdata + 1)

如果有一些编译器警告或错误,请发布确切的消息。两种访问数组的变体之间唯一真正的区别是,当使用 char variable[] 而不是 char 时,编译器将知道他将获得整个数组而不是单个实例的指针*变量

关于c++ - 如何将缓冲区中的数据复制到内存中的某处(char *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370201/

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