CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

关于使用多程线连接应用服务的问题,大家帮帮忙

楼主seion(科龙)2003-11-03 18:41:47 在 Delphi / VCL组件开发及应用 提问

unit   Unit1;  
  interface  
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,     StdCtrls,DB,   DBClient,   MConnect,   SConnect,   ComCtrls;  
  type  
      TForm1   =   class(TForm)  
          SocketConnection1:   TSocketConnection;  
          btn_linkserver:   TButton;  
          edt_status:   TEdit;  
          btn_disconnection:   TButton;  
          edt_ip:   TEdit;  
          IP:   TLabel;  
          STATUS:   TLabel;  
          procedure   btn_linkserverClick(Sender:   TObject);  
          procedure   btn_disconnectionClick(Sender:   TObject);  
      end;  
  type  
      link_server   =   class(TThread)  
      protected  
          procedure   Execute;   override;  
      public  
      constructor   create;  
      end;  
  var  
      Form1:   TForm1;  
  implementation  
  {$R   *.dfm}  
  procedure   TForm1.btn_linkserverClick(Sender:   TObject);  
  var  
  link_server1:link_server;  
  begin  
  if   socketconnection1.Connected   then  
        socketconnection1.Close;  
    link_server1:=link_server.create;  
  end;  
  procedure   TForm1.btn_disconnectionClick(Sender:   TObject);  
  begin  
  SocketConnection1.Connected:=false;  
  end;  
  constructor   link_server.create;  
  begin  
      inherited   create(true);  
      self.FreeOnTerminate:=True;  
      self.Suspended:=false;  
  end;  
  procedure   link_server.Execute;  
  begin  
  with   form1.SocketConnection1   do  
  begin  
  close;  
  address:=form1.edt_ip.text;  
  ServerName:='p_hourse.c_hourse';  
  try  
  connected:=true;  
  except  
  end;  
  self.Destroy;  
  form1.edt_status.Text:='link   over';  
  end;  
  end;  
  end.  
  当单击"btn_linkserver"按钮连接服务器完成后,再单击"btn_disconnection"按钮断开连接时就死机了。帮帮忙,兄弟!!!  
  问题点数:0、回复次数:2Top

1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-03 20:28:58 得分 0

多線程中要注意同步的問題,   你可看看   Synchronize   的用法!!Top

2 楼seion(科龙)回复于 2003-11-03 22:39:10 得分 0

to     aiirii  
   
  这样还不得,连一个后,再连时也会死机  
  -----------------------------还有没别的方法让其连接在后台运行也不在影响前台界面的响应  
  --------------  
  unit   Unit1;  
  interface  
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,     StdCtrls,DB,   DBClient,   MConnect,   SConnect,   ComCtrls;  
      const     CM_LINKED=WM_USER+$1001;  
      type  
      TForm1=class(TForm)  
          SocketConnection1:   TSocketConnection;  
          btn_linkserver:   TButton;  
          edt_status:   TEdit;  
          btn_disconnection:   TButton;  
          edt_ip:   TEdit;  
          IP:   TLabel;  
          STATUS:   TLabel;  
          Edit1:   TEdit;  
          Button1:   TButton;  
          procedure   btn_linkserverClick(Sender:   TObject);  
          procedure   btn_disconnectionClick(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          public     statusid:dword;   procedure   onlinked(var   message:Tmessage);message   CM_LINKED;  
          end;  
          type  
          link_server   =   class(TThread)  
          private  
          host:string;  
          sockcon:TSocketConnection;  
          protected  
          procedure   Execute;   override;  
          procedure   linkit;  
      public  
      constructor   create(ahost:string;asockcon:TSocketConnection);  
      end;  
  var  
      Form1:   TForm1;  
  implementation  
  {$R   *.dfm}  
  procedure   TForm1.btn_linkserverClick(Sender:   TObject);  
  var  
  link_server1:link_server;  
  begin  
  if   socketconnection1.Connected   then  
        socketconnection1.Close;  
    link_server1:=link_server.create(edt_ip.Text,SocketConnection1);  
    link_server1.Resume;  
    //   while   form1.statusid=2   do  
  //   application.ProcessMessages;  
  end;  
  procedure   TForm1.btn_disconnectionClick(Sender:   TObject);  
  begin  
  SocketConnection1.Connected:=false;  
  end;  
  constructor   link_server.create(ahost:string;asockcon:TSocketConnection);  
  begin  
      inherited   create(true);  
      host:=ahost;  
      self.FreeOnTerminate:=True;  
      self.Suspended:=true;  
      sockcon:=asockcon;  
   
  end;  
  procedure   link_server.Execute;  
  begin  
  Synchronize(linkit);  
  end;  
  procedure   link_server.linkit;  
  begin  
  with   form1.SocketConnection1   do  
  begin  
  close;  
  address:=form1.edt_ip.Text;  
  ServerName:='p_hourse.c_hourse';  
  try  
  postmessage(form1.Handle,CM_LINKED,0,2);  
  connected:=true;  
  //postmessage(form1.Handle,CM_LINKED,0,1);  
  except  
  //postmessage(form1.Handle,CM_LINKED,0,2);  
  end;  
  end;  
  end;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
  statusid:=2;  
  end;  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  showmessage(socketconnection1.Address);  
  if   form1.SocketConnection1.Connected   then  
  edit1.Text:='ture'   else  
  edit1.Text:='false';  
  end;  
  procedure   TForm1.onlinked(var   message:   Tmessage);  
  begin  
  if   message.LParam=2   then  
  edit1.Text:='dolink';  
  if   message.LParam=0   then  
  edit1.Text:='link   bad';  
  if   message.LParam=1   then  
  edit1.Text:='link   suceess';  
  end;  
  end.  
  ----------Top

相关问题

  • 不安装oracle客户端,pb应用程序如何连接到oracle服务器在线等待
  • 不安装oracle客户端,pb应用程序如何连接到oracle服务器在线等待
  • 在线了,Oracle的环境如何设置,如何和一个应用程序连接?
  • 如何应用程序和文件连接?
  • pb应用程序怎样连接sql server 2000数据库
  • 如何实现应用程序与COM服务器的连接?
  • web应用程序连接数据库时出错!!
  • pb和sql2000连接在应用程序中登录的问题
  • pb连接Access应用程序发布问题:SQLSTATE=IM004
  • 应用程序登录连接数据问题!

关键词

  • 连接
  • ip
  • server
  • btn
  • socketconnection
  • disconnectionclick
  • linkserver
  • linkserverclick
  • tedit
  • tbutton

得分解答快速导航

  • 帖主:seion

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo