share first queue point 

解决方案 »

  1.   

    我帮你调试好吗,[email protected]
      

  2.   

    new/delete肯定可以,只要在一个进程内。但入队/出对必须互斥,否则将引起不可预见的问题
    做法,申明一个原子操作对象如CMutex mutex,在每个线程要调用队列的成员时首先mutex.lock(),然后再Unlock(),就不会有问题了
      

  3.   

    ujun614(胡均):我看不一定,你会调试。我用DirextX的DirectShow来播放媒体流,用DirectPlay来网络传输
      

  4.   

    ourworld() :我用的临界区实现的互斥.在一个进程内好象用临界区就可以了用CMutex mutex好象更占用资源.我更关心的是,内存释放的问题,内存共享好象没有问题.
      

  5.   

    hxd1114(狂热者) :我的仅仅是跨线程分配,还没有到达跨进程分配的程度。能用另外的分配方法吗?比如,那个COM接口
      

  6.   

    临界够了,没错delete在同进程内没问题,如果delete非法说明指针有错或不使用new分配,或许你可以说的更详细一点
      

  7.   

    Kevin_qing(Kevin):我这个没有线程同步的问题(不必要)。只需要,互斥使用队列。
      

  8.   

    入队: PATCKET_MPEG1_DATA_NODE *pDataMsgNode;
    pDataMsgNode = new PATCKET_MPEG1_DATA_NODE; EnterCriticalSection( &g_csDataList ); //入队
    pDataMsgNode->pPrev = g_DataHead.pPrev;
    pDataMsgNode->pNext = &g_DataHead;
    g_DataHead.pPrev->pNext = pDataMsgNode;
    g_DataHead.pPrev = pDataMsgNode; //填充数据
    pDataMsgNode->mpeg1Data.dwPacketId = pMsg->dwPacketId;
    pDataMsgNode->mpeg1Data.dwType = pMsg->dwType;
    pDataMsgNode->mpeg1Data.mt.majortype = pMsg->mt.majortype ;
    pDataMsgNode->mpeg1Data.mt.subtype = pMsg->mt.subtype;
    CopyMemory(pDataMsgNode->mpeg1Data.pBuffer, pMsg->pBuffer, 32768);
    strcpy(pDataMsgNode->mpeg1Data.szMediaFileName, pMsg->szMediaFileName);
    LeaveCriticalSection( &g_csDataList );
    出队:PATCKET_MPEG1_DATA_NODE*  pSendNode; 
        PATCKET_MPEG1_DATA_NODE*  pNode = g_DataHead.pNext;
        while( true)
    {
    EnterCriticalSection( &g_csDataList );
    if (pNode != &g_DataHead )
    {
    pSendNode = pNode;

    //从双循环链表中删去节点
    pSendNode->pNext->pPrev = &g_DataHead;
    g_DataHead.pNext = pSendNode->pNext;

    //得到值
    PBYTE  pBuffer = new BYTE[32768]; 
    CopyMemory(pBuffer,pSendNode->mpeg1Data.pBuffer, 32768);
    //delete  pSendNode;
    //pSendNode=0; //转发数据到流的缓冲
    while ((g_pMediaDataStream->AddBuf(pBuffer) ==-1))
    {
    SetEvent( g_hDPBroadCastAvailEvent);
    Sleep(10);
    };
    //delete[] pBuffer;
    //pBuffer = 0; //得到下一个待处理节点
    pNode = g_DataHead.pNext;
    }
    else
    {
    pNode = g_DataHead.pNext;
    Sleep(10);
    }
    LeaveCriticalSection( &g_csDataList );
    }
      

  9.   

    http://www.csdn.net/expert/topic/464/464120.shtm帮帮我吧(网吧管理软件)
      

  10.   

    zzh():我这个也是共享内存--临界区管理。不过用双向循环链表实现动态队列。因为得到数据---从网络,我不能保证同步。用数据载媒体流的中,我也不能保证。所以,用链表实现队列。有柔性,对于环境苛刻的场合使用。