我用ado来连接access数据库。
程序有2个线程:
一个线程根据网络上监听到的数据在access表中添加记录。
另外一个线程获取数据库更新状态,如果已更新,则在clistctrl中显示最新记录。但是现在有问题,写和读两个线程存在同步问题,往往记录集已经更新了,但是读到的是没有更新前的数据,请求帮忙。

解决方案 »

  1.   

    用CRITICAL_SECTION 或 EVENT都可以做到
      

  2.   

    我用CCriticalSection cs来同步表示记录集是否更新的状态变量bool bNewRecord。
    在GetNewRecord(bool &bNew)和SetNewRecord(bool bNew)中用cs.lock()和cs.unlock()在写线程用:在recordset.update后面用my->SetNewRecord(true)
    在读线程用:Test.GetNewRecord(bIsNew);if(bIsNew == true){...}但是这样也不行阿,好像是.update在没有更新完毕的情况下就返回一样,读线程中返回的recordset总是差几条记录。
      

  3.   

    把Update和SetNewRecord放在cs.lock()和cs.unlock()中
      

  4.   

    检查一下两个进程打开表的方式是不是adOpenDynamic呢?
      

  5.   

    是adOpenDynamic,用的数据库是access的,不知道是否是access的问题?
      

  6.   

    mfctalk.zip 由Visual C++ 4.1开发的一个ISAPI应用,它使用了同步对象(CCriticalSection)来保护线程请求的数据(23KB) 
    http://vcprogramming.nease.net/code/mfctalk.zip