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(1);
    TranspondPersonBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
    Sleep(1);
    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了,  不知道怎么回事。不找原因啦,  就用上面这个方法啦。  如果明白的,请告知小弟,嘿嘿。

 

更多相关文章
一周排行
  • 


    		    RHCA預備知識:KVM基本配置
    首先庆祝老段工作室RHCA顺利开课! 本视频为RHCA的预备知识,主要讲解了KVM的一些基
  • 今天使用pstree想查看一下信息,结果发现: [[email protected] ~]# pstree init忖?atd 忖crond 忖events/0忖?aio/0 ? 忖kauditd ? 忖kblockd/0 ? 忖k
  • 


    		    基于ARP協定獲取區域網路內主機MAC地址
    ARP帧数据结构 #define BROADMAC {0xFF,0xFF,0xFF,0xF
  • 


    		    Silverlight3D模型能力之一
    正如大家所知道的,Silverlight1.0到目前的1.1是不支持3D的,而Adobe的
  • GBK編碼相關
    如上图.的GBK编码是A3AE, 那么·对应的无符号整数值应该是A*16**3+E*16*
  • 程序不是很完善,估计有n中死法 设计思想 打开一个zip文件时,屏幕底部显示zip里面的所有文件,当选择一个文件时,返回对其描叙 import java.awt.BorderLayout; import java.a
  • dialog是android的对话框控件,包括: 警告对话框:AlertDialog 进度对话框:ProgressDialog 日期选择对话框:DatePickerDialog 时间选择对话框:TimePickerD
  • 在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如"区号-电话号码")的数据,在导入SQLServer过程中,会 ...
  • 


    		    centos 6.4下zabbix2.2.2搭建實錄
    1.下载zabbix 2.2.2 http://www.zabbix.com/downlo
  • AaronYangC#人愛學不學5
    这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书  ...