多线程之间沟通的问题,求解。
想做一个多线程ping的程序。
有专门执行ADOQuery动作的子线程,用来实时更新一张表,表里是各个IP地址的ping通的状态。
有专门执行ping的子线程里用了组件:TIdIcmpClient ,在构造函数里把它初始化,
在OnReply里面想返回一个关于这个IP的SQL语句给专门执行ADOQuery动作的子线程。
由于线程数可能较多,会有较多的不同的SQL语句,
这些SQL语句该怎么安排好给专门执行ADOQuery动作的子线程去执行呢?
如何执行完一句就删除刚才执行完的这句呢?同一个子线程发过来的SQL语句可能是一模一样的。
用数组吗?该怎么做?请大侠针对这个问题给一个范例好吗?
用一个专门执行ADOQuery动作的子线程来对付较多的执行ping的子线程发过来的SQL语句会不会有
产生较多的延迟?那么,用一个以上的专门执行ADOQuery动作的子线程来对付的话,又该怎么解决呢?
本来是在执行ping的子线程里的Execute()里面动态new ADOQuery来执行的,但是线程数较多,担心内存可能消耗较大,
线程可能经常要挂起,然后又执行,又挂起,这样反复new delete后,也担心有问题。
所以想到上面说的办法,但是初步接触多线程,所以希望请大侠们给几个范例赐教。
谢谢!
[解决办法]
如果是我的话,我会再建一个线程,在线程中建立消息队列,其他线程中ping的结果,用PostThreadMessage将读写数据库的任务发给这个有消息队列的线程就行了.
也就是说,ping的线程只管ping,写数据库的线程只管写数据库,并且有消息队列排队,不会引起抢夺资源的情况.