多线程的问题,你应该会的,

tanzuxiang 2005-07-29 04:14:48
我要实现接收的数据通过线程保存在数据库,定义了一个TdataproThread线程,

接收数据的函数:
procedure TForm1.TcpServerAccept(Sender: TObject; ClientSocket: TCustomIpClient);
begin
... ...
dataprothread:=TdataproThread.Create(true);//创建线程
dataprothread.Resume; //启动保存数据线程
end;

procedure TClientDataThread.Execute;
begin
Synchronize(synchAddDataToControl);
end;
下面问题就来了,用F7运行,程序运行到第1行就报错了,
procedure TdataproThread.datatopro;
begin

form1.StatusBar1.SimpleText:='收到状态数据';
form1.Query1.Close;
form1.query1.SQL.Clear;
form1.Query1.SQL.Add('insert into status values');
...
...
end;
线程是个独立的执行体,我试了,在上面的处理函数里只要有form1.出现就报错,要实现我的用线程操作query1,该怎么改动?
线程里能包含自己的query吗?怎么包含? 一般的都是将query放在form里,而没有见过包含在线程里的

...全文
125 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wangzhi_04 2005-07-29
  • 打赏
  • 举报
回复
好像VCL控件不能在线程里面使用吧?或者在线程里面使用不安全!
johnmack 2005-07-29
  • 打赏
  • 举报
回复
vcl不是线程安全的
tanzuxiang 2005-07-29
  • 打赏
  • 举报
回复
中间Synchronize(synchAddDataToControl);写错了,改为Synchronize(datatopro);这是笔误,跟问的问题无关,

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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