int str_len = read(m_events[i].data.fd, buf, BUF_SIZE);
我有这个,我将数据读入声明的buf中
char buf[BUF_SIZE];
我正在尝试做的是,我正在尝试获取数据并将其交给我定义的WorkHanndler,无非就是一个线程池。
而功能是
void ServerManager::addWork(int sender, char *data){
Work* work = new Work(sender, data);
m_workHandler->addWork(work);
}
因此,我需要一个char指针,该指针指向我刚刚读取的数据。由于缓冲区定义为数组,因此我无法将其传递给函数。
另外,你们认为这在服务器设计方面是个好主意吗?我正在从缓冲区读取数据,并且不对其进行解析,而只是将原始数据传递到线程池(插入队列)。线程池有一个队列,五个独立的线程竞争使用互斥锁和条件变量从队列中获取作业。完成作业后,单独的线程会将结果写入输出缓冲区。请告诉我它是否有缺点,并且您有更好的主意。提前致谢。
最佳答案
我现在看到的唯一可能的漏洞可能在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 *variable
时,他将获得整个数组的指针,而不是单个实例。