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
...全文
204 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;
××××××××××××××××××××××××××× × 《Windows环境下32位汇编语言程序设计》 × × 附书代码说明 × ××××××××××××××××××××××××××× 1. 编译器和链接器 本附书代码全部采用 MASM 格式编写,推荐使用 MASM32 软 件包作为编译环境,MASM32 软件包可以在以下地址下载: MASM32官方站点: http://www.masm32.com 安装及开发的操作系统建议采用32位的Windows 7,在64位操作系统 上安装 MASM32 软件包,安装生成的Lib文件可能不兼容。 安装完成以后请将本光盘根目录下的环境设置批处理文件Var.bat 拷贝到 Masm32\bin 目录下,并根据 MASM32 的安装位置编辑修改 Var.bat 文件中的相关目录名称。 2. 代码维护工具 每个例子都包括了描述编译、链接方法的 makefile 文件, 使用 nmake 工具可以自动根据此文件进行编译链接,nmake 工 具可以从 Visual C++ 的 bin 目录中找到,也可以从作者的网 站中下载。 3. 编译环境和编译方法 建议使用命令行方式进行编译,以编译 Chapter02\Test 目录中 Test.asm 为例,步骤是: I. 打开一个“命令提示符”窗口。 II. 进入环境设置批处理文件 Var.bat 所在目录并执行 它,以后就可以使用这个“命令提示符”窗口编译 文件了。 x: cd \masm32\bin var III. 进入源代码目录: cd \chapter02\test IV. 使用 nmake 工具进行编译链接: nmake V. 执行编译好的可执行文件。 如果需要对源代码进行修改,不必关闭“命令提示符”窗口, 只要切换到编辑器窗口,在修改 *.asm 文件后重复进行第 IV 和 第 V 步骤即可。 # 特别注意:将光盘中的代码拷贝到硬盘后,必须将文件的只读属性去除! 4. 本光盘所包含目录的说明 根目录下的 *.pdf ;附录A、B、C的电子版文档 Chapter02\Test ;测试编译环境 Chapter03\HelloWorld ;Hello World Chapter04\FirstWindow ;用Win32汇编写第一个窗口 Chapter04\FirstWindow-1 ;用Win32汇编写第一个窗口 Chapter04\SendMessage ;窗口间的消息互发 Chapter04\SendMessage-1 ;窗口间的消息互发 Chapter05\Menu ;使用资源 - 使用菜单 Chapter05\Icon ;使用资源 - 使用图标 Chapter05\Dialog ;使用资源 - 使用对话框 Chapter05\Listbox ;使用资源 - 使用列表框 Chapter05\Control ;使用资源 - 使用子窗口控件 Chapter05\ShowVersionInfo ;使用资源 - 显示版本信息资源的程序 Chapter05\VersionInfo ;使用资源 - 使用版本信息资源 Chapter06\Timer ;定时器的使用 Chapter07\DcCopy ;在两个窗口的 DC 间互相拷贝屏幕 Chapter07\Clock ;模拟时钟程序 Chapter07\BmpClock ;用 Bitmap 图片做背景的模拟时钟程序 Chapter07\TestObject ;一些常见的绘图操作 Chapter08\CommDlg ;使用通用对话框 Chapter09\Toolbar ;使用工具栏 Chapter09\StatusBar ;使用状态栏 Chapter09\Richedit ;使用丰富编辑控件 Chapter09\Wordpad ;一个完整的文本编辑器例子 Chapter09\SubClass ;窗口的子类化例子 Chapter09\SuperClass ;窗口的超类化例子 Chapter10\MemInfo ;显示当前内存的使用情况 Chapter10\FindFile ;全盘查找文件的例子 Chapter10\FormatText ;文件读写例子 Chapter10\FormatText\FileMap ;使用内存映射文件进行文件读写的例子 Chapter10\MMFShare ;使用内存映射文件进行进程间数据共享 Chapter11\Dll\Dll ;最简单的动态链接库例子 - 编写 DLL Chapter11\Dll\MASM Sample ;最简单的动态链接库例子 - 使用 DLL Chapter11\Dll\VC++ Sample ;最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一个存在同步问题的多线程程序 Chapter12\ThreadSyn\UseCriticalSection ;使用临界区对象解决多线程同步问题 Chapter12\ThreadSyn\UseEvent ;使用事件对象解决多线程同步问题 Chapter12\ThreadSyn\UseMutex ;使用互斥对象解决多线程同步问题 Chapter12\ThreadSyn\UseSemaphore ;使用信号灯对象解决多线程同步问题 Chapter13\CmdLine ;使用命令行参数 Chapter13\Process ;创建进程的例子 Chapter13\ProcessList ;显示系统中运行的进程列表 Chapter13\Patch1 ;一个内存补丁程序 Chapter13\Patch2 ;一个内存补丁程序 Chapter13\Patch3 ;一个内存补丁程序 Chapter13\HideProcess9x ;Windows 9x下的进程隐藏 Chapter13\RemoteThreadDll ;用 DLL 注入的方法实现远程进程 Chapter13\RemoteThread ;不依靠任何外部文件实现远程进程 Chapter14\TopHandler ;使用筛选器处理异常 Chapter14\SEH01 ;最基本结构化异常处理例子 Chapter14\SEH02 ;改进后的结构化异常处理例子 Chapter14\Unwind ;异常处理中的展开操作例子 Chapter15\Ini ;使用 INI 文件 Chapter15\Reg ;操作注册表的例子 Chapter15\Associate ;操作注册表实现文件关联 Chapter16\TcpEcho ;实现 TCP 服务器端的简单例子 Chapter16\Chat-TCP ;用 TCP 协议实现的聊天室例子 Chapter17\PeInfo ;查看 PE 文件的基本信息 Chapter17\Import ;查看 PE 文件的导入表 Chapter17\Export ;查看 PE 文件的导出表 Chapter17\Resource ;查看 PE 文件的资源列表 Chapter17\Reloc ;查看 PE 文件的重定位信息 Chapter17\NoImport ;不使用导入表调用 API 函数 Chapter17\AddCode ;在 PE 文件上附加可执行代码的例子 Chapter18\OdbcSample ;用ODBC操作数据库的例子 Appendix A\EchoLine ;控制台输入输出的例子 Appendix B\MsgWindow01 ;消息机制试验 1 Appendix B\MsgWindow02 ;消息机制试验 2 Appendix B\MsgWindow03 ;消息机制试验 3 Appendix B\MsgWindow04 ;消息机制试验 4 Appendix C\BrowseFolder ;浏览目录对话框 6. 联系作者 虽然本书中所有的例子代码都已经在32位的Windows 98、Windows 2000、 Windows XP、Windows Vista和Windows 7下测试通过,但也有存在Bug的可能,如果 发现代码存在错误或者有其它问题,请告知作者,联系方法: E-mail:luoyunbin@hotmail.com 感谢您的支持! 作者:罗云彬
┌────────────────────────────────────────────┐ │ Dotpot PortReady 版本1.6 自述文件 │ ├────────────────────────────────────────────┤ │ * 请用记事本在窗口最大化条件下阅读此文件│ │ │ │ 一、软件简介 │ │ │ │ Dotpot PortReady 是一个多线程的端口扫描工具,用于进行狂速端口扫描。它具有极快的速度│ │和方便友好的操作界面,能快速地对大网段范围进行 Connect方式端口扫描。同时具有获取端口标识│ │的功能,可以用来快速地获取端口标识(Banner),内定对80端口标识进行特别处理,能方便地获取Web│ │Server类型。PortReady 1.6同时提供Windows图形版本和控制台版本,不管是在图形环境下,还是在│ │控制台模式中,都可以方便自如地进行端口扫描。 │ │ │ │ │ │ 二、使用方法 │ │ │ │ 图形版本使用方法一看即知,在此不再赘述。 │ │ │ │ 控制台版本使用方法如下: │ │ │ │ 用法: │ │ PR.EXE <起始地址>[-停止地址] <端口1-端口2|端口1,端口2,...> [选项] │ │ │ │ 选项: │ │ -b 获取端口标识 │ │ -e 显示英文信息 │ │ -o 只显示开放端口 │ │ -d:delay 扫描延时,默认2秒 │ │ -t:thread 线程数目,默认100个线程 │ │ │ │ 例如: │ │ PR.EXE 192.168.0.1 1-65535 -d:1 -e │ │ PR.EXE 192.168.0.1 1-2000 -t:200 -v -b │ │ PR.EXE 192.168.0.1-192.168.9.255 21,3389 -t:200 │ │ │ │ 三、常见问题 │ │ │ │ 1.PortReady的运行环境是什么? │ │ 答:没有进行过严格的运行环境测试。作者在Win98/2000下编译运行正常,按推断应该能运│ │ 行在 Win95/98/ME/NT/2000/XP下。推荐运行于Win2000下,以获得更高的稳定性和更快│ │ 的速度。 │ │ │ │ 2.PortReady用什么原理扫描的? │ │ 答:用TCP的Connect方式扫描的。端口扫描之前没有进行Ping扫描,原因有二:1.这样能对│ │ 屏蔽ICMP数据的主机进行端口扫描;2.Ping扫描太繁琐了,不会,呵呵~~ │ │ │ │ 3.超时时间怎样选择? │ │ 答:请根据网速酌情选择超时时间。默认Connect超时时间为2秒,如果要获得更快的速度,│ │ 可设为 1秒,但可能会有漏报现象;相反,如果网速较慢或要更高的准确率,可适当增│ │ 加Connect超时时间,一般不要超过5秒,最大20秒。 │ │ │ │ 4.线程数目怎样选择? │ │ 答:根据网速和系统情况选择线程数目。默认线程数目为100个,最大为300个线程。如果出│ │ 现线程阻塞,请适当减小线程数目。一般而言,Win2000下可使用更多线程进行扫描。 │ │ │ │ 5.扫描无法停止时怎么办? │ │ 答:这是出现线程阻塞的缘故。此时应强行关闭程序:命令行版本下按Ctrl+C,图形版本如│ │ 果单击“停止扫描”后依然没有反应,请单击“关闭”按钮,此时可能出现内存泄漏。│ │ │ │ 6.扫描结果在哪里? │ │ 答:无论是图形版本还是控制台版本,扫描结果都保存在PortList.txt里。运行图形版本程│ │ 序 PortReady.exe,如果没有关闭“保留历史纪录”选项(默认保留历史纪录),将自动│ │ 导入PortList.txt中的结果。 │ │ │ │ 7.怎样卸载PortReady? │ │ 答:PortReady是“绿色软件”,所有参数配置都保留在PortReady.ini中,没有在注册表保│ │ 留任何信息。如果要卸载,请自行删除PortReady的相关文件(见下面:文件列表)。 │ │ │ │ 8.PortReady是用什么编写的? │ │ 答:在Visual C++6.0下用Win32 API编写的。发行版本用LCC-Win32编译的,因为LCC-Win32│ │ 编译可执行文件短小,运行快速。作者没使用相对臃肿的MFC,因为不会,嘿嘿~~ │ │ │ │ 9.PortReady的源代码在哪里有下载,怎样编译? │ │ 答:点普工作室主页上有下载,网址是:http://dotpot.533.net 。源代码包内含有图形版│ │ 本 LCC-Win32源程序、图形版本VC源程序和控制台版本源程序。你可以选择你熟悉的编│ │ 译工具进行编译(LCC-Win32或Visual C++ 6.0)。 │ │ │ │ 10.PortReady不保留版权么? │ │ 答:是的。作者不保留本软件的任何权利,用户可免费拷贝、分发、修改本软件及软件源代│ │ 码。如果乐意,可以通知原作者一声,那样原作者会很高兴的:)…… │ │ │ │ 11.还有其它问题怎么办?   │ │ 答:可以到点普工作室主页看看,在留言板上留言,或者给作者写信:yonsm@163.com。 │ │ │ │ │ │ 四 、文件列表 │ │ │ │ PortReady.exe 图形版本主程序文件 │ │ PortReady.ini 图形版本参数配置文件 │ │ PortList.txt 扫描生成的结果文件 │ │ PR.exe 控制台版本主程序文件 │ │ Readme.txt 自述文件 │ │ │ │ │ │ 五 、发布历史 │ │ │ │ PortReady 1.6 发布日期:01/31/2002,整理源代码,改写控制台版本。这可能是终结版本│ │ PortReady 1.2α 发布日期:11/01/2001,图形版增加域名解析、远程登录、结果排序等功能│ │ PortReady 1.1β 发布日期:09/01/2001,图形界面测试版 │ │ PortReady 1.0 发布日期:07/06/2001,更改显示方式,增加获取端口标识等功能 │ │ PortScan 0.92 发布日期:05/27/2001,第一个发布版本,感谢大家测试 │ │ PortScan 0.7 发布日期:05/20/2001,用于进行内部测试 │ │ │ │ │

16,742

社区成员

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

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