c++ - 从函数插入 vector

标签 c++ function sockets vector insert

我正在为路由器编写代码。我已经设法从客户那里发送和接收信息。我现在想做的是创建一个 vector 来处理来自接收包的线程的所有传入包。

我正在使用 C++ 和 BOOST。

int rawpacket_recv(int s, unsigned char *packet, int length)
{
    int to_recv = 0;

    to_recv = read(s, packet, length);
    //and some error detection
}

void RecvThread(int *socket)
{
    int eth_receiver, eth_socket;

    eth_socket = *socket;

    for(;;)
    {
        unsigned char *eth_buffer = (unsigned char *)malloc(1518);

        eth_receiver = rawpacket_recv(eth_socket, eth_buffer, 1518);

        //put eth_buffer into a vector defined in main

        free(eth_buffer);
        usleep(10000);
    }
}

int main(int argc, char **argv)
{
    vector<unsigned char *> packages;

    int eth0socket;
    char eth0 = "eth0";

    eth0socket = CreateAndBindSocket(ETH_P_ALL, &eth0socket, eth0); //Method from the program that does what it name describes

    boost::thread eth0recvthread(RecvThread, &eth0socket);

    eth0recvthread.interrupt();
    eth0recvthread.join();

    return 0;
}

我在代码片段中留下了一些不重要的代码,但我想要的是 RecvThread 能够将接收到的包放入这个 vector 中,这样我就可以在 main 方法中处理它们(目前)——大概是作为互斥量/信号量。

谢谢!

最佳答案

(注意:对于以后的问题,您使用的 IDE 实际上与手头的问题无关,除非问题是关于 IDE 本身......:) )

话虽如此,顺序应该是:

  1. 将对 vector 的引用传递给您的线程函数(和互斥量 + 条件变量。)
  2. 在线程函数中,获取互斥量,推送到 vector 并通知条件变量。
  3. 在main函数中,在一个循环中,等待条件变量的通知,如果vector不为空,则处理入口。
  4. 正确管理内存(即使用 vector<unsigned char> 来存储数据包而不是原始缓冲区,这样您就不需要费心释放...

关于c++ - 从函数插入 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496051/

相关文章:

c++ - 复制文件时出现段错误

c++ - 如何为CSR格式设置SparseMatrix.valuePtr()、SparseMatrix.outerIndexPtr()和SparseMatrix.innerIndexPtr()?

c# - 分析可执行文件的工具

C++ 计数时间克服 clock_t 的 72 分钟范围

c - http 套接字请求返回尾随字符

linux - 通过套接字发送 NULL 数据

c - 使用指针在函数内部定义数组

javascript - 如何运行 jQuery onClick?需要传递一个变量来运行.ajax

excel - 如何使每个工作表的被调用单元格唯一?

sockets - Linux内核TCP Socket修改