R
RoninHao
Unregistered / Unconfirmed
GUEST, unregistred user!
我用的indy9的TIdtelnet控件,在他的IdTelnet1DataAvailable事件中,如果每收到一行回显的字符串就把这一行字符串加入一个TStringList中去,然后另起一个线程专门负责从这个 stringlist中读数据分析,分析完后删除一行,具体线程中的代码是这样的
分析线程
while (true)do
begin
while (strlist.count>0)do
begin
AnalysString2(strlist.Strings[0]);
strlist.Delete(0);
end;
sleep(500);
end;
在分析线程中针对获取的字符串在分析并生成sql语句,插入一个sqllist的队列
专门再有一个写数据库的线程负责从sqllist中读取sql语句进行写库操作
写数据库线程代码如下:
while(true)do
begin
if (sqllist.count>0) then
begin
EnterCriticalSection(CriticalSection) ;
ADOQuery.SQL := sqllist;
sqllist.Clear;
LeaveCriticalSection(CriticalSection);
ADOQuery.ExecSQL;
ADOQuery.SQl.Clear;
end;
sleep(500);
end;
不停的去读sqllist,如果有数据就拿过来写库,然后把sqllist清空
整个处理流程如下:
TIdTelnet控件发送一个命令后,就不停的接受回显的字符串,字符串接受的速度有时候快有时候慢,我把接受到的字符串存入一个TStringList,然后起一个线程不停对这个stringlist第一行的数据读出来分析,分析完后删除;并在分析线程中会生成sql语句,插入到一个Tstringlist类型的sqllist中,另外再有一个写库线程读这个sqllist完成写库操作
请问我上面的处理方法有什么不妥的和会造成出错的地方,或者大家有神么更好的处理方法么?我总感觉我这个会出问题但是又想不起来要怎么搞,谢谢大家
分析线程
while (true)do
begin
while (strlist.count>0)do
begin
AnalysString2(strlist.Strings[0]);
strlist.Delete(0);
end;
sleep(500);
end;
在分析线程中针对获取的字符串在分析并生成sql语句,插入一个sqllist的队列
专门再有一个写数据库的线程负责从sqllist中读取sql语句进行写库操作
写数据库线程代码如下:
while(true)do
begin
if (sqllist.count>0) then
begin
EnterCriticalSection(CriticalSection) ;
ADOQuery.SQL := sqllist;
sqllist.Clear;
LeaveCriticalSection(CriticalSection);
ADOQuery.ExecSQL;
ADOQuery.SQl.Clear;
end;
sleep(500);
end;
不停的去读sqllist,如果有数据就拿过来写库,然后把sqllist清空
整个处理流程如下:
TIdTelnet控件发送一个命令后,就不停的接受回显的字符串,字符串接受的速度有时候快有时候慢,我把接受到的字符串存入一个TStringList,然后起一个线程不停对这个stringlist第一行的数据读出来分析,分析完后删除;并在分析线程中会生成sql语句,插入到一个Tstringlist类型的sqllist中,另外再有一个写库线程读这个sqllist完成写库操作
请问我上面的处理方法有什么不妥的和会造成出错的地方,或者大家有神么更好的处理方法么?我总感觉我这个会出问题但是又想不起来要怎么搞,谢谢大家