多线程访问数据库,Socket的多线程???(200分)

  • 主题发起人 主题发起人 海马
  • 开始时间 开始时间

海马

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个代收费的中间程序,我作服务端和数据库联接,和客户端以Socket,
客户端不断从发来收费请求,服务端收到请求后如何产生一个线程查询数据库,
再将结果返回,请大家给我讲讲思路,最好有实供学习!!!
 
你可以看看TThread类的用法。不过对于这种程序,最好少用控件,免得碍手碍脚。:)
 
没有人就这个问题发表见解了吗????
 
老兄,你是联通计费部的吗?
 
对了,该 如何获得各个客户的连接的呢?
比如,张三和李四一起向服务器连接,我如何识别他们各自的连接呢?
 
获得对方的IP,关于数据库多线程,我也在做一个,有很多的问题,前面有个兄弟说不要用组件,
但不可能不用一样,每个线程要用有单独的数据库会话的!
 
我也有同样的问题,就是在线程中访问数据库组件总是失败
我是这样做的:
在MyThread中声明AQuery:TQuery
在MyThread的Create(Query:TQuery)时
AQuery:=Query;
但是通不过?
请指教如何在线程中访问数据库???
 
我想写一个代收费的中间程序,我作服务端和数据库联接,和客户端以Socket,
客户端不断从发来收费请求,服务端收到请求后如何产生一个线程查询数据库,
再将结果返回,请大家给我讲讲思路,最好有实供学习!!!
解决此问题的思路可以这样:
思路一:(WIN平台)服务端建立查询的线程Pool,供客户请求时使用, 客户端在发出请
求后,启动相应的线程来查询,如果你需要异步查询的功能,则立即返回,并在调用接口
中提供回调接口,等查询线程结束后调用此接口通知客户程序。如果是需要同步功能,则
等待线程返回(注意同步控制)
思路二、客户端提供一个服务,使服务端查询结束后连接到此服务,然后将查询结果返回。
不知道是否符合你的需要?
 
我在关注
 
一开始就创建若干个线程,平时挂起,用的时候再唤醒。
constructor framecontrol.create(suspended:boolean;i:integer);
begin
try
inherited create(suspended);
freeonterminate:=true;
threadid:=i;
adoct:=TADOConnection.Create(nil);
adoqt:=TADOQuery.create(nil);
adoct.ConnectionString:=form1.ADOC_main.ConnectionString;
adoct.LoginPrompt :=False;
adoct.Mode:=cmShareDenyNone;
adoct.Provider :=form1.ADOC_main.Provider;
adoqt.Connection :=adoct;
adoct.Connected :=true;
form1.SG_thread.Cells[1,threadid+1]:='挂起';
except
form1.M_send.
Lines.Add(datetimetostr(now())+'线程'+inttostr(i)+'创建失败!');
end;
end;
 
好象不用这么麻烦吧!你直接用datasetprovider输出不行吗?
我觉得可以。
 
看看李维的书,分布时多层应用,兴许会有帮助的。
 
不妨参考一下http协议,是典型的C/S结构
就是Request/Response模型
 
ServerSocket在得到ClientSocket连接时有一个CustomWinSocket参数,指明了两端的
Host、Address和Port。
在OnGetThread事件里创建处理客户连接的线程,该线程会被自动调用。
OnThreadStart事件处理初始化,比如连接数据库,
和OnThreadEnd事件处理善后,比如关闭连接。
 
我做过这样的系统,在线程里访问ADO控件是可用的,但最后使用临界保护,不然在访问频繁
时是会出现异常的。
 
我前几天刚做好一个多线程访问数据库的程序。
1、所有的数据库控件都必须在线程类中动态生成
2、不能用ADOTable控件,这个控件不适合用于多线程中的,我就被害死了
3、所有控件在线程结束时必须释放。
 
請問灰云1和netdigger能具體說說嗎?
或者能否將有關代碼斷發給我?
我現在急用.謝謝了!!
 
[:)]你的EMAIL?
 
后退
顶部