比如在一个  对话框类中有函数
int nTotal=0;
Save()
{
   for(int i;i=0;i<100)
   {
       .......; //这个地方比较耗时
       nTotal++;
   }
}当Save()函数被执行后,nTotal将逐步加1直到100为止.1.如果在for循环尚没有结束的时候,主对话框向这个子对话框发送了nTotal=0的消息;这个时候会对循环中的nTotal产生影响吗?再从0开始?还是说这个来自主对话框的消息必须等到for循环结束了之后,才给nTotal赋值为0?2.如果在for循环尚没有结束的时候,主对话框向这个子对话框发送消息要求再次执行Save()函数,这个子对话框会怎么处理?会引起混乱吗?还是第二个等到第一个结束后再开始?谢谢了,很绕,别见怪!

解决方案 »

  1.   

    1,发送了nTotal=0的消息;就再从0开始,参数值受外面影响
    2,同时执行,会引起混乱,所以你要自己搞好同步
      

  2.   

    .如果在for循环尚没有结束的时候,主对话框向这个子对话框发送了nTotal=0的消息;这个时候会对循环中的nTotal产生影响吗?再从0开始?还是说这个来自主对话框的消息必须等到for循环结束了之后,才给nTotal赋值为0? 
    ============================
    如果是多线程的情况下,是会产生影响的,如果单线程是不会出现你所说的情况的,因为在单线程时当for循环在执行时,主窗口不可能会执行代码。如果在for循环尚没有结束的时候,主对话框向这个子对话框发送消息要求再次执行Save()函数,这个子对话框会怎么处理?会引起混乱吗?还是第二个等到第一个结束后再开始? 
    =========================================================
    这上问题和上面的一样。感觉楼主对线程没有什么概念,最好看看书
      

  3.   

    你的程序应该是单线程吧?或者说不会有多个线程访问nTotal。
    先确定Save函数中有没有针对消息的处理,如果没有,则在执行Save函数过程中不会受到外面的影响。
      

  4.   

    多谢大家了啊,尤其是cnzdgs,第一次见勋章,还一下次见了这么多,拜倒!真感谢啊!
      

  5.   

    InterlockedDecrement()
    InterlockedIncrement()