我的程序是这样的:
用一个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

解决方案 »

  1.   

    当是单线程时,OnData和OnTimer不可能同时执行,不会出现一个打断另一个的情况.
    了解一下时钟的机制.
      

  2.   

    use Critical-Section FunctionEnterCriticalSection
    ...
      

  3.   

    "当是单线程时,OnData和OnTimer不可能同时执行,不会出现一个打断另一个的情况."
    请问为什么?
    时钟的机制我不大明白,不知是硬中断还是软中断;但是OnData事件是网络数据到达时触发的,应该有可能打断OnTimer函数的执行吧?
      

  4.   

    goodsmaker(help someone)说的对,既然你是单线程,那么即便在OnTimer执行过程中触发OnData事件,也会排队等候OnTimer函数结束的才开始执行的
      

  5.   

    OnTimer不是2个线程的,是和其他消息一样的排队进行处理的。
      

  6.   

    Timer的消息优先级一般比较低,同时发生时,可能后触发