插入函数的向量

时间:2013-10-21 13:35:27

标签: c++ function sockets vector insert

我正在为路由器编写代码。我已经成功地发送和接收客户的信息。我现在要做的是创建一个向量来处理来自我收到包的线程的所有传入包。

我正在使用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能够将收到的包放入此向量中,以便我可以在main方法中处理它们(现在) - 可能是作为互斥/信号量。

谢谢!

2 个答案:

答案 0 :(得分:1)

(注意:对于将来的问题,您使用的 IDE 与手头的问题无关,除非问题是关于 IDE本身.. :) )

话虽如此,序列应为:

  1. 将对向量的引用传递给线程函数(和互斥+条件变量。)
  2. 在线程函数中,获取互斥锁,按下向量并通知条件变量。
  3. 在main函数中,在循环中,等待条件变量的通知,如果向量不为空,则处理该条目。
  4. 正确管理内存(即使用vector<unsigned char>存储数据包而不是原始缓冲区,然后您不需要为释放而烦恼......

答案 1 :(得分:1)

将向量与其互斥锁以及内存管理放在一个类中。 (不应该是malloc,除非现有的C API消耗了分配)