DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: eyang11
今日帖子: 1
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
女 blbz (冰力不足) ★☆☆☆☆ -
禁用账号
2017/6/19 9:06:39
标题:
被禁用帐号,仅在管理模式可见! 浏览:1472
加入我的收藏
楼主: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/6/19 9:20:02
1楼: 线程中禁止访问 UI。
另外有 线程类,不需要你调用 API。
你调用了 API,出问题,找微软,不要让 DELPHI 背黑锅。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wuxiangyang (wxy) ★☆☆☆☆ -
盒子活跃会员
2017/6/19 9:26:01
1楼: 我一般都是这样做的

type
  {TReadProcess 负责从缓冲池读取数据}
  TReadThreadEvent = procedure(P: Pointer) of object;
  TReadProcess = class(TThread)
  private
    Fhandle: THandle;
    FDataBufferType: TDataBufferType;
    FSourceType: TSourceType;
  protected
    FOnExecute: TReadThreadEvent;
    procedure Execute; override;
  public
    constructor Create; overload;
    destructor Destroy; override;
    procedure ReadDataBuffer(P: Pointer); virtual;
    procedure SetReadDataBuffer(AValue: TReadThreadEvent);
  published
    property DataBufferType: TDataBufferType read FDataBufferType write FDataBufferType;
    property SourceType: TSourceType read FSourceType write FSourceType;
    property OnExecute: TReadThreadEvent read FOnExecute write FOnExecute;
  end;

{ TReadProcess }

constructor TReadProcess.Create();
begin
  inherited Create(false);
  //FreeOnTerminate := true;
end;

destructor TReadProcess.Destroy;
begin
  inherited Destroy();
end;

procedure TReadProcess.Execute;
var
  P: Pointer;
begin
  inherited;
  while not Terminated do
  begin
      p := nil;
      ReadDataBuffer(P);
      Sleep(100);
  end;
end;

procedure TReadProcess.ReadDataBuffer(P: Pointer);
begin
  if Assigned(FOnExecute) then
    FOnExecute(P);
end;

procedure TReadProcess.SetReadDataBuffer(AValue: TReadThreadEvent);
begin
  if Assigned(AValue) then
     FOnExecute := AValue;
end;

----------
var
  myReadProcess: TReadProcess;

procedure TForm1.myprocess(P: Pointer);
begin
   //代码A
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  P: Pointer;
begin
    if myReadProcess= nil then
      myReadProcess:= TReadProcess.Create;
    myReadProcess.OnExecute :=  myprocess(p);
end;
----------------------------------------------
-
作者:
女 blbz (冰力不足) ★☆☆☆☆ -
禁用账号
2017/6/19 9:56:17
2楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/6/19 10:13:34
3楼: 我都用匿名的线程。现写线程内部代码。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wuxiangyang (wxy) ★☆☆☆☆ -
盒子活跃会员
2017/6/19 10:33:12
4楼: 老王用API ,还是线程类?
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2017/6/19 11:28:15
5楼: 什么叫跑偏?这个描述真销魂。。。

还有,windows虽然不禁止,但是你也不要在子线程里去直接控制ui。
----------------------------------------------
--
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2017/6/19 11:32:01
6楼: 不管是API还是线程类, 都不得在线程内访问窗口句柄
----------------------------------------------
-
作者:
男 sczhyq (旺财) ★☆☆☆☆ -
普通会员
2017/6/19 12:35:30
7楼: 还是用 TTimer 吧, 如果不是非得用线程
----------------------------------------------
我84砖家
作者:
女 blbz (冰力不足) ★☆☆☆☆ -
禁用账号
2017/6/19 21:56:02
8楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
作者:
男 crystalmoon (crystalmoon) ★☆☆☆☆ -
盒子活跃会员
2017/6/20 8:01:39
9楼: @blbz (冰力不足)
想要轻舞飞扬,请用QWorker 或者 OmniThreadLibrary, 和你使用api的效果相不多。

比如用 QWorker 可以 直接
procedure TXXXX.DoHeart(AJob: PQJob);
begin
  if AJob.IsTerminated then
    Exit;
  //你的代码
end; 
Workers.Post(DoHeart,nil);

//nil那货是用来传递参数到线程函数内部的,如果有的话。当然还有很多高级用法,定时,计划组,消息啥的,就得你自己研究了。
----------------------------------------------
-
作者:
女 blbz (冰力不足) ★☆☆☆☆ -
禁用账号
2017/6/20 9:49:17
10楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
作者:
男 mochizuki (mochizuki) ★☆☆☆☆ -
普通会员
2017/6/20 10:20:06
11楼: 最近几个项目都在用qworker,感觉真是个好东西!楼主可以试一下。
----------------------------------------------
-
作者:
女 blbz (冰力不足) ★☆☆☆☆ -
禁用账号
2017/6/20 17:29:09
12楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2017/6/20 17:43:44
13楼: 多线程是魔鬼,不到必须不要用。
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
女 blbz (冰力不足) ★☆☆☆☆ -
禁用账号
2017/6/20 18:36:16
14楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
作者:
男 scarlette (Scarlette) ★☆☆☆☆ -
普通会员
2017/6/21 0:00:31
15楼: @hardnut

没那么严重吧兄弟,多线程的东西玩儿多了你就习惯了。咱平时一个程序里二三十条线程都稀松平常的,线程上下文想想清楚就可以了,没啥好担心的。
----------------------------------------------
-
作者:
男 zhoutler (苦行僧) ★☆☆☆☆ -
普通会员
2017/6/21 0:19:02
16楼: 老老实实按照OS的要求,UI线程干它的事,辅助线程干它的事,分工明确,不是更好!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS