正在做一个Socket的多线程,该如何创建和控制呢? (100分)

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

black_horse1220

Unregistered / Unconfirmed
GUEST, unregistred user!
我是新手,以前没做过Socket中的多线程,现在要做一个
Socket代理服务器,由客户端向我的代理服务器发请求,然后我的代理服务器向另一个服务器发请求。服务器收到我的请求后,将返回结果传回到我的代理服务器,由我的代理服务器将结果返回给客户端。
需要用Socket多线程实现,该如何创建控制呢?
 
定义两个线程ReciveMsgThread,SendMsgThread,定义一个线程管理类,这样可以灵活动态来调整线程数,便于管理。可以考虑使用事件来触发一些处理事件,用过程变量来实现。这主要是多线程的设计,不管你是什么,SOCKET一样的,无非是在线程里处理不同的SOCKET连接。要注意线程同步问题。线程数不要大于16个。
 
谢谢楼上的指点,我是初学者,还不是很明白,能再详细一点说明线程管理类吗?
还有你说的,注意线程同步,那我应该是做成同步才对吧,我用互斥同步可以吗?
hMutex:=createMutex(nil,false,nil);
 
呵呵,你好象不是很理解同步的概念,在访问共享资源时,多线程会存在冲突问题,比如同时写同一内存空间,同时写一磁盘文件,都会存在问题。因此,千万注意,不要为了同步而同步,则是初学者最容易犯的错误,以为线程一定要同步。(多数情况是需要同步的)。
同步的4个对象:临界区(进程内同步),互斥(类似临界,但可以进程间同步),信号量(类似互斥,但增加了计数资源器。可以允许有限的线程同时访问资源)。具体它们怎么使用你需要去看一下MSDN,或者看看DELPHI书籍。
线程管理类,只是自己建立的一个独立类而已,你可以不使用,你可以在MAIN单元里直接create,suspend,resume。不过这样从对象设计角度不是很好。
 
这个问题我不会[:(]
多线程的问题还要更进上步的研究!
=====
多个线程不访问共享资源,我想不需要同步,
你的要求应该是客户请求时,建一线程,当客户断开时,释放这个线程。
要不要同步,就要看具体的要求了
 
如果是新手,就不要到这里来发什么帖子,到网上找相关代码修改,慢慢消化,
 
偶认为,两个线程是远远不够的.而应该为每个连接开两个线程.
到了繁忙的时候,你会为线程调度疯掉的.决不夸张.
 
后退
顶部