C ++" deque iterator不兼容"错误

时间:2016-03-18 08:51:11

标签: c++ multithreading iterator queue deque

我一直在使用套接字编程实现一个程序, 并且我遇到了错误消息" deque iterator不兼容"。

程序代码如下: 1.

while (1)
{
    tmp_fds = read_fds;

    printf("[Waiting Select Signal] \n");
    if (select(maxfd + 1, &tmp_fds, 0, 0, (struct timeval *)0)<1)
    {
        perror("select error : ");
        exit(1);
    }

    for (fd = 0; fd<maxfd + 1; fd++)
    {
        if (FD_ISSET(fd, &tmp_fds))
        {
            if (fd == ssock)
            {
                if ((csock = accept(ssock, (struct sockaddr *)&client_addr, &clen))<0)
                {
                    perror("accept error : ");
                    exit(0);
                }

                FD_SET(csock, &read_fds);

                printf(" - New client is connected = %d \n", csock);
                stEpInfo[iEpCount].iFDNum = csock;
                stEpInfo[iEpCount].sIpAddr = inet_ntoa(client_addr.sin_addr);
                iEpCount++;

                if (csock>maxfd)
                {
                    maxfd = csock;
                }
            }   else
            {
                printf(" - Received Client Socket Signal (FD = %d) \n", fd);
                memset(&read_message, 0, sizeof(read_message));

                data_len = recv(fd, (char*)&read_message, sizeof(read_message), 0);



                CDataQueue::getDataQueue()->pushDataToQueue(read_message);

在此源代码中,服务器接收数据并将其抛入队列,并且每当服务器接收数据时都会反复发生这种情况。

  1. 线程正在努力查明数据是否已插入队列。如果插入数据(这意味着队列不为空),则将弹出数据。

    unsigned WINAPI PreprocessInsert(void * data){

    printf("[Thread Start] \n");
    CDatabase *l_db = (CDatabase *)data;
    
    int cnt = 0;
    int iECount = 0;
    ST_CCT stCCT;
    while (1){
    
        if (!CDataQueue::getDataQueue()->getQueue().empty()){ ST_MONITORING_RESULT poppedData = CDataQueue::getDataQueue()->popDataFromQueue();}    
    
  2. 我像这样编写了与队列相关的代码。

    void CDataQueue :: pushDataToQueue(ST_MONITORING_RESULT data){

    ::EnterCriticalSection(&m_stCriticalSection);
    m_deQueue.push_back(data);
    ::LeaveCriticalSection(&m_stCriticalSection);
    

    }

    ST_MONITORING_RESULT CDataQueue :: popDataFromQueue(){

    ::EnterCriticalSection(&m_stCriticalSection);
    ST_MONITORING_RESULT data = m_deQueue.front();
    m_deQueue.pop_front();
    ::LeaveCriticalSection(&m_stCriticalSection);
    
    return data;
    

    }

  3. 当程序运行时,有时&#34; deque迭代器不兼容&#34;弹出消息,有时不弹出。当我对程序执行调试时,我看到收到的数据在队列中,但if (!CDataQueue::getDataQueue()->getQueue().empty())语句不起作用。

    我不明白发生了什么。任何帮助表示赞赏!

0 个答案:

没有答案