share first queue point
解决方案 »
- 用C++做双显卡编程,如何实现,谢谢
- VCMFC 打印问题
- 谁能提供一个editor的参考?可以实现从外面拖图片,视频,音频格式文件到此editor里面进行操作?
- 高分求解directshow 网络播放器问题, 在线等待,不够可以加分
- 程序调用MFC DLL时,在FreeLibrary的时出现奇怪的内存泄漏
- 我的Winioctl.h头文件没有STORAGE_BUS_TYPE。
- 现在VC 用MFC开发的多还是用.net开发的多呢?
- 就200分了,望高手笑纳。 关于activex控件实例的问题。
- 怪事!我的系统装了摄像头的驱动程序后可以视频,但是关机后再开机的话,驱动程序全部丢失,又要重新装过???
- 如何自绘曲线图
- 请教如何显示一个已有的wmf文件?
- 求教一个关于连接点的问题,十万火急!!!
做法,申明一个原子操作对象如CMutex mutex,在每个线程要调用队列的成员时首先mutex.lock(),然后再Unlock(),就不会有问题了
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 );
}