求教对数据库多线程操作时的解决方案 (200分)

  • 主题发起人 BlueBird_777
  • 开始时间
B

BlueBird_777

Unregistered / Unconfirmed
GUEST, unregistred user!
手中的一个项目,我这边是客户端,接口函数别人已经封装在dll里面,
我直接调用就可以了。
现在的问题是,接口程序需要实时监控接收接口电文,收到电文后就对数据库
进行一系列的查询、写入操作,然后发出应答电文。而客户端主程序又需要定时对
数据库中的数据刷新改写。请问怎样避免主程序和接口程序在某时刻同时对数据库
进行定位查询、写入的操作呢? (ACCESS数据库)
ACCESS + ADOConnection + ADOTable
简单说一下:接口要求实时操作数据库。而主程序又需要定时刷新改写数据库以及
用户界面要求对数据库的操作。怎样避免数据库的操作异常?
请说详细些,最好给出方案和代码。如果能及时解决问题,另加300分以示敬意。
 
你做的项目和我最近作得有点像。
我的实现是这样的,由于的我的客户端很多数据量不较大,所以访问数据库
要花费的时间较长,我创建了一个,线程池,还有一个数据池
每个线程对应一个数据库连接,
但程序启动时,会启动n个线程,同时建立了n个数据库连接,n可以通过配置文件设置。
socket收到数据是会到线程池寻找线程执行业务逻辑,如果池中有线程则唤醒线程
并把数据传入线程,从池移去线程。如果池中线程都在执行中,则把数据放入数据池。
当线程检查数据池中是否有数据,如果则取出数据运行线程。
我开始用的是Access数据库,效果太差。后来换成Sql server.
 
帮你up!~~~
 
加锁,不知Access有无这功能
 
To雨人:
你说的线程池和数据池是怎样创建和运作的?
抱歉我不是很熟悉这方面。
方便给个源码和实例程序吗?
谢谢!!
bluesoft◎163.com
 
把共享的数据用“临界区”保护起来。
 
请说详细些好吗? 
 
如果用数据库服务器就好了,它有加锁功能,能够防止记录操作相撞.
 
很难的问题吗?
 
高手在哪里???
 
就沒有人能囘答嗎?
 
請各位幫忙up一下
我等了一個禮拜了
知道多少說多少好不好?
謝謝大傢。
 
可以在主控单元里设一个公用变量或对象,在线程体里通过sychronize方法保证同步,各个线程在进行数据库操作实现查询对象或变量,相当于令牌,具体要看你的应用要求了,是一个在操作其余的等待还是退出自己看着办吧,应该可以防止同时操作。
 
从本质上说如果一个连接正在更新数据库记录,那么数据库将会锁定页记录(2k),因此只要连结束不要太多,想办法判断当前的连接数目应该也可以解决,access偶用得不多,弄个sql server吧,并发操作只要没有循环的触发嵌套就没问题的。
本人的一点愚见!希望能帮你解决问题。
 
多线程中的互斥问题
var hMutex:THandle;
//声明全局互斥
窗体建立事件中
hMutex:=CreateMutex(nil,False,nil);//建立互斥
线程中调用共用体部位
if WaitForSingleObject(hMutex,INFINITE)=WAIT_OBJECT_0 then
//等待其它互斥释放
begin
//共用体程序
end;
ReleaseMutex(hMutex);//释放互斥
窗体关闭事件中
CloseHandle(hMutex);//释放全局互斥
 
顶部