Delphi 线程resume 不能调用Execute
如果Resume不能唤起线程,请试试如下的函数,试试。
GetExitCodeThread(ThreadHandle,ExitCode)
来取得ExitCode,如果ExitCode=STILL_ACTIVE
表示线程还存在,对于存在的线程,则可以使用ResumeThread(ThreadHandle)来唤醒线程,如果线程仍然处于运行状态,则会返回错误具体的自己去看相关的API的返回值。
本人在实际应用中还是没能够解决上面问题,只好委曲找到另一种解决方法。
procedure TfrmDataExchangePlatformMain.ActionStartServiceExecute(
Sender: TObject);
begin
StatusBar1.Panels[1].Text := '当前操作: ' + ActionStartService.Caption;
Screen.Cursor := crHourGlass;
try
FExecfinish := True;
Timer_Service.Enabled := True;
//MyThread.Resume;
finally
Screen.Cursor := crDefault;
end;
end;
{
procedure TfrmDataExchangePlatformMain.Timer_ServiceTimer(Sender: TObject);
var
ExitCode: DWORD;
begin
//if MyThread.MyThreadExecfinish then
//MyThread.Execute;
MyThread.Resume;
GetExitCodeThread(MyThread.Handle,ExitCode);
if not MyThread.Suspended then
begin
ShowMessage('可以运行');
end;
if ExitCode=STILL_ACTIVE then
begin
ShowMessage('可以运行');
end;
end;
}
procedure TfrmDataExchangePlatformMain.Timer_ServiceTimer(Sender: TObject);
begin
MyThread := TMyThread.CreateEx(False);
MyThread.ExeTimer := Timer_Service;
MyThread.MemoLogStrings := cxMemo_Log.Lines;
MyThread.LogStrings := cxMemo_Log.Lines;;
MyThread.MyThreadExecfinish := True;
MyThread.HTTPRIOLeExp := DMConn.HTTPRIOLeExp;
MyThread.HTTPRIONC := DMConn.HTTPRIONC;
end;
{ TMyThread }
procedure TMyThread.Execute;
begin
inherited;
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
if MyThreadExecfinish then
ExecTimer;
end;
function TMyThread.ExecTimer: Boolean;
begin
Result := False ;
FMyThreadExecfinish := False;
Screen.Cursor := crHourGlass;
CoInitialize(nil);
try
FExeTimer.Enabled := False;
TranspondClientBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
Sleep(1000);
TranspondPersonBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
Sleep(1000);
TranspondDeptBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
//readLogStrings;
//SaveLogFile;
finally
Result := True;
FMyThreadExecfinish := True;
CoUninitialize;
FExeTimer.Enabled := True;
Screen.Cursor := crDefault;
//Suspended := True;
end;
end;
遇到此问题的,不妨这么试试吧, 其实上面找到了原因,但是找不到解决方法, 上面应该是线程被停止了,不存在了, 但是就是不知道在哪被停止的, 因为执行两次resume的时候 exitcode和STILL_ACTIVE还是一样, 但是就是在以后就为0了, 不知道怎么回事。不找原因啦, 就用上面这个方法啦。 如果明白的,请告知小弟,嘿嘿。
Delphi 线程resume 不能调用Execute的更多相关文章
- Delphi线程基础知识
参考http://blog.chinaunix.net/uid-10535208-id-2949323.html 一.概述 Delphi提供了好几种对象以方便进行多线程编程.多线程应用程序有以下几方面 ...
- 多线程的基本概念和Delphi线程对象Tthread介绍
多线程的基本概念和Delphi线程对象Tthread介绍 作者:xiaoru WIN 98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行 ...
- TMsgThread, TCommThread -- 在delphi线程中实现消息循环
http://delphi.cjcsoft.net//viewthread.php?tid=635 在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使 ...
- TMsgThread, TCommThread -- 在delphi线程中实现消息循环(105篇博客,好多研究消息的文章)
在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供. 花了两天的事件研究了 ...
- Delphi线程定时器TThreadedTimer及用法--还有TThreadList用法可以locklist
Delphi线程定时器 - -人生如歌- - 博客园http://www.cnblogs.com/zhengwei0113/p/4192010.html (* 自己编写的线程计时器,没有采用消息机制, ...
- delphi 线程教学第二节:在线程时空中操作界面(UI)
第二节:在线程时空中操作界面(UI) 1.为什么要用 TThread ? TThread 基于操作系统的线程函数封装,隐藏了诸多繁琐的细节. 适合于大部分情况多线程任务的实现.这个理由足够了吧 ...
- delphi 线程教学第一节:初识多线程
第一节:初识多线程 1.为什么要学习多线程编程? 多线程(多个线程同时运行)编程,亦可称之为异步编程. 有了多线程,主界面才不会因为耗时代码而造成“假死“状态. 有了多线程,才能使多个任务同时 ...
- Java线程池ThreadPoolExecuter:execute()原理
一.线程池执行任务的流程 如果线程池工作线程数<corePoolSize,创建新线程执行task,并不断轮训t等待队列处理task. 如果线程池工作线程数>=corePoolSize并且等 ...
- Java 线程池submit和execute
submit方法: public abstract class AbstractExecutorService implements ExecutorService { protected <T ...
随机推荐
- CSRF跨站点请求伪造漏洞问题
最近在写php,项目写完后送检发现一个漏洞问题CSRF,强行拖了我一天的时间,沉迷解决问题,茶饭不思,日渐消瘦,时间比较赶,这篇比较糙,凑合看下. 好了废话不多说下面是今天的解决方案. 博主用的是Th ...
- 【转】string常用函数
原文地址:http://hi.baidu.com/baowup/blog/item/3a27465c86d71546faf2c066.html/cmtid/de1ef3f0de7554a0a40f52 ...
- 【CSS中width、height的默认值】
对于初学者来说,CSS中的width.height的默认值是很神奇的,因为经常看到如下这样的代码:明明只给一个#father标签(红色的div)设置了一个width,为啥它在浏览器中显示出来是有一个固 ...
- 提示用户体验的最佳免费 Jquery 表单插件
网页表单是一个老生常谈的话题.出于这样或那样的目的,一些示例中都会包括用户注册,电子商务结算,用户设置甚至联系人表格.而输入栏是非常容易用现代的CSS3技术来应用样式.但是到底什么决定整体用户体验? ...
- jQuery创建ajax关键词数据搜索
在web开发过程当中,我们经常需要在前台页面输入关键词进行数据的搜索,我们通常使用的搜索方式是将搜索结果用另一个页面显示,这样的方式对于搭建高性能网站来说不是最合适的,今天给大家分享一下如何使用 jQ ...
- call()与apply()区别
一.方法的定义 call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call ...
- Bootstrap Modal 框 alert confirm loading
/** * Created by Administrator on 2016/5/4. */ /** * 模态窗口 */ window.Modal = { tpls:{ alert:'<div ...
- JavaScript实现弹框
提起JS弹框,我首先想到的是Alert,然后想到的还是Alert,最后我竟然就只知道Alert.然后面试就死在这个Alert上了.恼火. 根据网上各位大神的总结,我整理了一下,也顺便学习了一下. 一. ...
- 解决ASP.NET中ReportView与IE11的兼容性问题
前久发现以前用ReportView开发的一个软件的报表,在IE11上运行时出错,陆续查了好几天才解决了问题. 开发环境: VS2010,ReportView 10.0.402,RDLC报表模板 问题: ...
- leetcode修炼之路——383. Ransom Note
题目是这样的 Given an arbitrary ransom note string and another string containing letters from a ...