Xp下编译的多线程程序在win7 32位下无法开启多线程,

haochin 2013-06-08 02:23:01
大家有没有碰到过这样子的情况呢。线程根本没有执行。
下面是线程内执行的部份代码,帮我看看哪有问题。

procedure thAutoMsg.Execute;
var
AdoC : TADOConnection;
qryMsg : TADOQuery;
begin
FreeOnTerminate := True;

AdoC := TADOConnection.Create(nil);
AdoC.ConnectionString := Main_F.conMain.ConnectionString;
AdoC.LoginPrompt := False;
AdoC.KeepConnection := True;
AdoC.CommandTimeout := 60;
AdoC.ConnectionTimeout := 60;
AdoC.Open;

qryMsg := TADOQuery.Create(nil);
qryMsg.Connection := AdoC;

while Main_F.btnCheckOrder17uooStop.Enabled do
begin
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
haochin 2013-06-11
  • 打赏
  • 举报
回复
procedure thAutoMsg.Execute;
var
  AdoC : TADOConnection;
  qryMsg : TADOQuery;
begin
  FreeOnTerminate := True;
 
  AdoC := TADOConnection.Create(nil);
  AdoC.ConnectionString := Main_F.conMain.ConnectionString; //这一句有问题,用一个普通的String字符串来赋值就可以了,用.ConnectionString属性就是不行。
  AdoC.LoginPrompt := False;
  AdoC.KeepConnection := True;
  AdoC.CommandTimeout := 60;
  AdoC.ConnectionTimeout := 60;
  AdoC.Open;
 
  qryMsg := TADOQuery.Create(nil);
  qryMsg.Connection := AdoC;
 
  while Main_F.btnCheckOrder17uooStop.Enabled do
  begin
酣酣 2013-06-08
  • 打赏
  • 举报
回复
楼上大哥正解! 只有Execute的代码开不出来个啥! 还是自己跟踪一下吧! 呵呵! 如果XP下能够执行的话! Win7下问题也不大的! 跟Execute代码关系不大! 呵呵!
sololie 2013-06-08
  • 打赏
  • 举报
回复
线程根本没有执行的话,你给我们看execute里的东东有啥用啊。 在xp下正常? win7下不正常先确认是否有权限,确认是否用到了什么数据库驱动之类的。 你还是先断点单步跟一下再说了。
feiba7288 2013-06-08
  • 打赏
  • 举报
回复
引用 楼主 haochin 的回复:
大家有没有碰到过这样子的情况呢。线程根本没有执行。 下面是线程内执行的部份代码,帮我看看哪有问题。
procedure thAutoMsg.Execute;
var
  AdoC : TADOConnection;
  qryMsg : TADOQuery;
begin
  FreeOnTerminate := True;

  AdoC := TADOConnection.Create(nil);
  AdoC.ConnectionString := Main_F.conMain.ConnectionString;
  AdoC.LoginPrompt := False;
  AdoC.KeepConnection := True;
  AdoC.CommandTimeout := 60;
  AdoC.ConnectionTimeout := 60;
  AdoC.Open;

  qryMsg := TADOQuery.Create(nil);
  qryMsg.Connection := AdoC;

  while Main_F.btnCheckOrder17uooStop.Enabled do
  begin
哥,有两点 1. 将AdoC : TADOConnection;定义到线程的Private里面定义 将AdoC := TADOConnection.Create(nil);放到线程的Create事件里面; 2. 线程里面调用ADO访问数据库要用CoInitialize和CoUnInitialize; 调用Coinitialization要Uses Comobj; uses Comobj; procedure thAutoMsg.Execute; var qryMsg : TADOQuery; begin FreeOnTerminate := True; try CoInitialize(nil); AdoC.ConnectionString := Main_F.conMain.ConnectionString; AdoC.LoginPrompt := False; AdoC.KeepConnection := True; AdoC.CommandTimeout := 60; AdoC.ConnectionTimeout := 60; AdoC.Open; qryMsg := TADOQuery.Create(nil); qryMsg.Connection := AdoC; while Main_F.btnCheckOrder17uooStop.Enabled do begin ... end; finally CoUnInitialize; end; end;

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧