一个单线程程序中两个函数,一个CSocket数据接收处理函数中对数据data进行了重新初始化操作,另外一个OnTimer函数,进行数据的显示操作,这样会出现数据冲突吗?(就是说OnTimer函数执行到一半的时候前一个函数被处理了),按照单线程函数来说应该不会,但是这个困惑源自于我遇到的另外一个问题:一个别的程序给我发CSocket消息,就是在CSocket数据接收处理函数中打出一个MessageBox,按照我对单线程的理解第一次打出MessageBox之后程序应该停止了,但是这个时候其实还是会谭出下一个MessageBOx,所以就问下达人们怎么理解单线程这个东西,是不是只要单线程就不用管数据同步的问题?是的话如何理解我遇到的那个现象呢?是因为MessageBox的原因吗?在线等待

解决方案 »

  1.   

    OnTimer如果是 WM_TIMER的话,就是单纯的单线程而用函数指针方式的Timer,似乎是系统线程调用的所有可能存在多线程问题
      

  2.   

    单线程不会出现数据访问冲突,所以也就不需要考虑同步。
    上面的现象是因为:每个线程有一个消息队列,线程中创建的所有窗口的消息都通过这个消息队列来传递,MessageBox函数内部有消息循环处理代码,所以当消息队列中收到Socket消息时,也会得到响应。如果你把MessageBox换成其它没有消息循环的函数,例如Sleep,就不会有这种现象了。
      

  3.   

    你的代码收到了第1个CSocket,创建了MessageBox, 该MessageBox接收到了第2个CSocket,创建了第2个MessageBox