小编kid*_*bro的帖子

常规过程/方法指针

如何定义timeSetEvent作为实例方法的回调函数?

TUDPBC = class(TObject)                                         
private
  hTimer: word;
...
public
  procedure sendUDPBC;
...
end;

procedure DoTimer(uTimerID, uMessage: UINT; dwUser,dw1,dw2: DWORD); stdcall;

procedure TUDPBC.sendUDPBC;  //send UDP Broadcast
begin
...
  hTimer := TimeSetEvent(FTimeOut, uRes, DoTimer, 0, TIME_ONESHOT); //need DoTimer as a TUDPBC class method
...
end;
Run Code Online (Sandbox Code Playgroud)

delphi winapi

2
推荐指数
1
解决办法
314
查看次数

线程终止(再次......)

当我通过将终止标志设置为true来停止线程'srch_slave_thread'时,(srch_slave_thread.terminate)释放线程在析构函数的'inherited'行停止,为什么?是挂起的WaitFor吗?如果我在析构函数中注释掉'inherited',那么线程就会停止并释放自己.

取出'继承'并调出代码后:为什么线程在调用析构函数后会跳转到DoTerminate方法?

谢谢.

Tsrch_slave_thread = class(TThread)   
private
  FSW: TStopWatch;
protected
  procedure Execute; override;
public
  SimpleEvent: TSimpleEvent;
  procedure DoTerminate; override;
  ...
  constructor Create; 
  destructor Destroy; override;
end;
Run Code Online (Sandbox Code Playgroud)

创建事件obj.在构造函数中>>

constructor Tsrch_slave_thread.create;
begin
  inherited create(true);   
  Fsw := TStopWatch.Create;
  SimpleEvent := TSimpleEvent.Create;
end;
Run Code Online (Sandbox Code Playgroud)

调用析构函数后跳转到这里?>>

procedure Tsrch_slave_thread.DoTerminate;
begin
  inherited;
  self.simpleEvent.SetEvent; 
end;
Run Code Online (Sandbox Code Playgroud)

线程在析构函数>>中继承

destructor Tsrch_slave_thread.destroy;
begin
  self.SimpleEvent.free;
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

在这里创建线程>>

function TMaster.th_slvsearch_start: integer; 
begin
  if not Assigned( Fslave_search_thread ) then begin
    Fslave_search_thread := TFslave_search_thread.create;
    ... 
  end
  else begin  
    ...
    exit;
  end;  
  with Fslave_search_thread do
  begin    
    master …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading

1
推荐指数
1
解决办法
241
查看次数

TreeView - 单击空白区域

如果只点击一个空白区域,如何决定TreeView的OnClick事件?我使用下面的代码,但在CheckNode中,我总是得到一个TreeNode实例,尽管我只点击了TreeNode旁边的空白区域.

procedure TfrmDevTree.TreeView1Click(Sender: TObject);
var
  p: TPoint;
  CheckNode: TTreeNode;
begin
  GetCursorpos(p);
  p := TreeView1.screentoclient(p);
  CheckNode := TreeView1.GetNodeAt( p.X, p.Y );
  if CheckNode = nil then
    Exit;
  ...
end;
Run Code Online (Sandbox Code Playgroud)

delphi treeview

1
推荐指数
1
解决办法
163
查看次数

标签 统计

delphi ×3

multithreading ×1

treeview ×1

winapi ×1