【发布时间】:2016-03-11 18:36:17
【问题描述】:
我有以下实现指向表示活动语音流的结构的指针的哈希表。
hash_table_t stream_buffers;
struct stream_struct *streamPtr =
(struct streamPtr *) malloc(sizeof(struct stream_struct));
...
case CTRL_MSG_TYPE_STREAM_START_REQ:
(hash_table_insert(stream_buffers, stream_id, streamPtr));
当我从 UDP 套接字接收到语音数据报时,我会进行查找并将该数据报插入目标流的本地环形缓冲区。
if (hash_table_search(stream_buffers, _stream_id, (void **) &streamPtr))
{
streamPtr->ringBuffer.entries[streamPtr->ringBuffer.head] = datagramBuff;
memcpy(streamPtr->ringBuffer.entries[streamPtr->ringBuffer.head],
2 * sizeof(uint16_t) + datagramBuff,
streamPtr->framelegnth);
streamPtr->ringBuffer.head =
(streamPtr->ringBuffer.head + streamPtr->framelegnth)
% streamPtr->ringBuffer.size;
if (streamPtr->ringBuffer.filled < streamPtr->ringBuffer.size)
streamPtr->ringBuffer.filled++;
}
现在我想并行处理来自不同流的这些语音帧。为此,我需要遍历哈希表并将所有指向活动流的指针收集到一个公共数组中,该数组将用作 PARALLEL_FOR 循环的参数以进行操作。我目前的哈希表实现没有这样的操作。我该如何实施?
【问题讨论】:
标签: c data-structures hashtable