社区
C++ Builder
帖子详情
求一线程!
kinglh
2004-10-25 04:17:15
我想用一个线程来联接数据库,这个线程的功能是:查询数据库中是否有记录的Flag = 0的记录,要是有则把它的一个字段(Flag)修改为1,显示该条记录(这个暂时不管),(新添加的记录时Flag = 0).
我原来用一个TTimer控件! 把这个功能每几秒钟执行一次!这样联接远程数据库会很慢! 影响主窗口的其实操作~!
请问一个线程怎样做!最好能做成同步的线程!
谢谢!
...全文
116
5
打赏
收藏
求一线程!
我想用一个线程来联接数据库,这个线程的功能是:查询数据库中是否有记录的Flag = 0的记录,要是有则把它的一个字段(Flag)修改为1,显示该条记录(这个暂时不管),(新添加的记录时Flag = 0). 我原来用一个TTimer控件! 把这个功能每几秒钟执行一次!这样联接远程数据库会很慢! 影响主窗口的其实操作~! 请问一个线程怎样做!最好能做成同步的线程! 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gyj_china
2004-11-18
打赏
举报
回复
写成服务吧?其实服务也是一个线程,而且又系统自己管理,很方便的。下面是连接和执行部分的代码,你可以用向导生成服务,再添加如下代码。
void __fastcall TCustomService::ServiceExecute(TService *Sender)
{
while(!Terminated)
{
try{
AnsiString strSQL = "select flag from ds_sys_reg where flag = 0";
DScan->SQL->Clear();
DScan->SQL->Add(strSQL); //上行表中查找驾校业务数据
DScan->Open();
while (!DScan->Eof)
{
DScan->Edit();
DScan->FieldValues["flag"] = 1;
DScan->Post();
DScan->Next();
}
}catch(...)
{
buf = Now();
fp = fopen("c:\\server0731.log","a+");
fprintf(fp,"[%s] 服务异常中断,主线程15秒后重连。\n",buf);
fclose(fp);
Sleep(15000); //数据断开后15秒重连
Connection();
}
Sleep(100);
ServiceThread->ProcessRequests(false);
}
}
void __fastcall TCustomService::Connection()
{
AnsiString strConnect;
try{
//建立数据数据链接
ADOConnection1->Connected = false;
strConnect = "Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=DataBaseName;Data Source=127.0.0.1";
ADOConnection1->LoginPrompt = false;
ADOConnection1->ConnectionString = strConnect;
ADOConnection1->Connected = true;
buf = Now();
fp = fopen("c:\\Server.log","a+");
fprintf(fp,"[%s] 网络连接成功OK\n",buf);
fclose(fp);
}catch(...)
{
buf = Now();
fp = fopen("c:\\Server.log","a+");
fprintf(fp,"[%s] 初始化网络连接错误\n",buf);
fclose(fp);
}
}
kinglh
2004-10-29
打赏
举报
回复
怎么没人来拿分~ 真的要我把分钱部给一个人!?
kinglh
2004-10-26
打赏
举报
回复
只考虑连接问题!
我用ADO连接数据库, 当网络断开不能上网,也就是连接不到数据库的时候,该线程提示连接失败,并且每隔一个时间(如一分钟)再重连接一次.
有没有人知道怎么样做!! 出来帮帮忙了~
kinglh
2004-10-25
打赏
举报
回复
现在不是考虑怎样操作数据库的问题,因为我的数据库是远程的,在本在用ADO去联接!只要有新记录添加就时实的把它修改.
ESSENCE_JN(BCB爱好者) 现在不要讨论数据库的操作问题!
罗杰斯
2004-10-25
打赏
举报
回复
我感觉不是线程不线程的问题,Flag=0的时候都做了些什么?又为什么要改为1?我感觉还是逻辑上的错误吧。
多线程(一):创建线程和线程的常用方法
一:为什么要学多线程 应付面试 :多线程几乎是面试中必问的题,所以掌握一定的基础知识是必须的。 了解并发编程:实际工作中很少写多线程的代码,这部分代码一般都被人封装起来了,在业务中使用多线程的机会也不是很多(看具体项目),但是作为一个高级程序员如果不会多线程是说不过去的。 二:进程与线程 进程 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统...
Java多线程(超详细!)
1、什么是进程?什么是线程? 进程是:一个应用程序(1个进程是一个软件)。 线程是:一个进程中的执行场景/执行单元。 注意:一个进程可以启动多个线程。 eg.对于java程序来说,当在DOS命令窗口中输入: java HelloWorld 回车之后。 会先启动JVM,而JVM就是一个进程。 JVM再启动一个主线程调用main方法。 同时再启动一个垃圾回收线程负责看护,回收垃圾。 最起码,现在的java程序中至少有两个线程并发, 一个是垃圾回收线程,一个是执行main方法的主线程。 3、进程和线程是什么关系?
一个请
求
方法是一个线程吗?不是!
之前对于线程和方法的理解有些偏差,竟稀里糊涂的认为一个线程就是一个方法,一个方法就是一个线程。尤其在理解ThreadLocal执行原理的时候,更是晕乎 (ThreadLocal把当前线程作为key,来维护管理一个可变的对象,在某一个方法里面set值,在后面的某个方法调用里面get值,如果一个方法就是一个线程,那set和get使用的key就不是同一个了,set进去的值get是拿不出来了) 现在
java过程优雅关闭线程!
Java中原来在Thread中提供了stop()方法来终止线程,但这个方法是不安全的,所以一般不建议使用。文本将介绍两种可以优雅的终止线程的方式…第一种在JAVA《Java多线程模式》中有一种叫Two-Phase Termination(两步终止)的模式可以优雅的终止线程,这种模式采用了两个步骤来终止线程,所以叫两步终止模式。先将执行标志位isShutdown 设为false,使工作中的线程转变为...
python多线程是假的!速度慢!效率低下!不升反降!
情景描述 最近在做实验时,想到用多线程来加快对数据集的加载速度。在尝试后总感觉时间依旧很慢,于是查阅资料得知:python多线程是个天坑! Python中的多线程是假的多线程! 因为Cpython解释器有一个东西叫全局解释器锁(GIL)。在解释器解释执行 Python 代码时,先要得到这把锁,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。所以python多线
C++ Builder
13,826
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章