我的程序是这样的:
用一个map来缓存数据,当有数据到来的时候,现将数据保存在map中;另设一个定时器来定时读取map中的数据进行处理。
问题是,定时器处理数据时要进行迭代运算。我们知道,map的插入操作会导致迭代子的实效,从而导致迭代运算失败,其结果是不可预期的。
代码示意如下:
std::map<int,int> g_mapData;void OnData(int a,int b)
{
g_mapData.insert(std:map<int,int>::value_type(a,b));
}void OnTimer()
{
std::map<int,int>::iterator it = g_mapData.begin();
for(;it!=g_mapData.end();it++)
{
//dosomething...
}
}现在的问题是:OnData和OnTimer两个函数都是当事件中断信号到来时立刻运行的。但是如果OnTimer正在迭代时,OnData被执行,那么会导致OnTimer函数产生不可预知的结果!
请问:如何解决?我的开发环境是VS2003
用一个map来缓存数据,当有数据到来的时候,现将数据保存在map中;另设一个定时器来定时读取map中的数据进行处理。
问题是,定时器处理数据时要进行迭代运算。我们知道,map的插入操作会导致迭代子的实效,从而导致迭代运算失败,其结果是不可预期的。
代码示意如下:
std::map<int,int> g_mapData;void OnData(int a,int b)
{
g_mapData.insert(std:map<int,int>::value_type(a,b));
}void OnTimer()
{
std::map<int,int>::iterator it = g_mapData.begin();
for(;it!=g_mapData.end();it++)
{
//dosomething...
}
}现在的问题是:OnData和OnTimer两个函数都是当事件中断信号到来时立刻运行的。但是如果OnTimer正在迭代时,OnData被执行,那么会导致OnTimer函数产生不可预知的结果!
请问:如何解决?我的开发环境是VS2003
了解一下时钟的机制.
...
请问为什么?
时钟的机制我不大明白,不知是硬中断还是软中断;但是OnData事件是网络数据到达时触发的,应该有可能打断OnTimer函数的执行吧?