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

***在线求救:关于线程超时的问题?***

楼主701701()2004-09-04 12:11:58 在 Delphi / Windows SDK/API 提问

我的问题是在调用一个API函数的时候,  
  例如WNetAddConnection2这个函数可能需要很长时间才返回结果  
  如何在给定的时间内,如何没有返回结果则停止.  
   
  procedure   MyThread.Execute;  
  var  
      NRW:   TNetResource;  
      Res:   Dword;  
      restr:string;  
  begin  
  with   NRW   do  
  begin  
      dwType   :=   RESOURCETYPE_ANY;  
      lpRemoteName   :=   pchar('\\'+nowip+'\ipc$');  
      lpProvider   :=   '';  
  end;  
      FreeOnTerminate   :=true;     //设置线程终止许可  
      Res   :=   WNetAddConnection2(NRW,   '',   'administrator',   CONNECT_UPDATE_PROFILE);  
      //大家注意就是上面这个函数有时需要很长的时间才返回!  
      if   Res   =   No_Error   then  
      begin  
          WNetCancelConnection2(NRW.lpRemoteName,   CONNECT_UPDATE_PROFILE,true);  
          Synchronize(GiveAnswer);  
      end  
  end;  
   
  以上是用线程类的方法,可以设置超时吗?如何设置????  
   
  另外:如何用API来创建线程的方法如何解决上面的问题?  
   
  请各位高手不吝赐教!(最好有源代码)  
   
  ps:我比较穷,给的分数不多,请原谅 问题点数:0、回复次数:6Top

1 楼701701()回复于 2004-09-04 12:34:39 得分 0

高手啊,高手,你在哪里啊?Top

2 楼qinmaofan(采菊南山下【抵制日货】)回复于 2004-09-05 09:34:09 得分 0

我的一点提示,没经过测试。  
  把可能会耗时比较长的函数放在一个线程中执行,比如是mythread。  
  然后在调用的地方:  
   
  mythread:=   Tmythread.create(false);  
  mythread.freeonterminate:=true;  
  mythread.resume;  
  WaitForSingleObject(mythread.handle,2000);   //等待线程执行完毕,如果超过2秒钟就返回。  
  Top

3 楼701701()回复于 2004-09-07 09:44:36 得分 0

谢谢上面这位朋友  
  WaitForSingleObject   好像一定要有对象的句柄才能控制  
  而WNetCancelConnection2是没有句柄的啊!  
  上面这位朋友用到了自身线程的句柄  
  思路不错,谢谢,  
  但是可能不会成功,  
   
  我的想法是将WNetCancelConnection2放入一个子线程中  
  WaitForSingleObject指向子线程的句柄  
   
  不知道那位高手可否解决这个问题  
  最好有源代码  
  谢谢  
   
   
   
  Top

4 楼man8888(北京男人)回复于 2004-11-09 14:06:03 得分 0

我建议创建一个TTestThread来监视这个MyThread,并在MyThread线程中添加一个PassTime:DWORD;属性,当现成MyThread.Resume时开始计时,而在TTestThread线程的While循环中不断GetTickCount然后从PassTime时间减去,如果超过指定毫秒数则超时!TTestThread的循环需要加入适当的Sleep语句。Top

5 楼701701()回复于 2004-11-12 08:17:04 得分 0

谢谢man8888(北京男人)  
  我的考虑是:  
  即使终止超时连接线程  
  但是我也无法验证终止了线程就可以终止WNetCancelConnection2这个函数的执行  
  我担心的是,window在执行完WNetCancelConnection2才终止这个线程  
  也就是说即使线程终止了,函数还是要执行的  
  而这一点是无法验证的!!!!Top

6 楼tigerii(tigerii)回复于 2004-11-12 14:42:37 得分 0

701701   is   a   good   software   person   with   abilityTop

相关问题

  • 多线程下载网页,如果一个线程超时,为什么别的一定超时?
  • 如何用perl实现线程的超时
  • 串口接收线程"受扰"超时,影响接收数据的问题?
  • 怎样在线程外关闭线程?
  • [线程问题] - 在线程中建立线程
  • 线程
  • 阻塞式的INDY如何解决线程关闭超时程序无法退出???
  • 多线程出错,在线!!
  • 线程问题,在线等。
  • 在多线程中子线程如何访问主线程的全局变量?

关键词

  • 线程
  • 函数
  • 执行
  • 超时
  • mythread
  • nrw
  • 句柄
  • wnetcancelconnection
  • ttestthread
  • 终止

得分解答快速导航

  • 帖主:701701

相关链接

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

广告也精彩

反馈

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