在此处你为什么要实现多线程,其实你可以通过在使用CDaoRecordset这个类的实例前进行控制,在使用前用线程进行同步,这样实现起来就比较方便了。

解决方案 »

  1.   

    像access等单用户的数据库系统是需要进行同步处理的,数据库的同步处理主要是处理好insert、update等SQL语句的同步处理,即保证对某个table的所有的insert、update等操作在任何时刻只能有一个进行。因此,解决此问题的关键应该是为每一个table设计一个同步对象。
    用CCritialSection.Lock/Unlock即可,但你将其放在CDaoRecordset的构造函数和析构函数中是起不到任何作用的,应该是用Lock和Unlock对子将需要同步的操作序列包含起来(这些代码在CDaoRecordset的访问者中,不是在CDaoRecordset派生类的内部),例如:
        m_Critic_Table1.Lock(); //m_Critic_Table1为为Table1设计的同步对象
        对CDaoRecordset的操作;//各种对Table1的插入、修改等操作
        m_Critic_Table1.Unlock();
    你将CCritialSection.Lock/Unlock放在构造函数和析构函数中产生的效果只是保证了DaoRecordset的构造过程和析构过程被同步,与数据库的操作无任何关系,
    另外,CritialSection只能保证某个进程内部的线程间的同步,如果有两个或多个进程需要对同一个table进行操作,就要使用mutex.