DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 21
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 roguebear (旺财) ★☆☆☆☆ -
普通会员
2018/9/9 20:58:13
标题:
TTable 打开错误,微小概率,请教 浏览:948
加入我的收藏
楼主: 请教大家。 如下的语句作为一个子线程,很小几率会抓到一个last error为0的错误。
这个dtbase是一个数据库,主界面是只读的cxgrid。
大概10来次会弹出一次。。。求教了。。
    try
    {
        dtBase->Open();
    }
    catch(...)
    {
        MessageBox( NULL, IntToStr( GetLastError() ).c_str(), "Import3", MB_OK );  
    }
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/9/9 23:13:05
1楼: 你在线程里操作ui?按此在新窗口浏览图片
----------------------------------------------
--
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2018/9/10 9:02:57
2楼: 线程操作UI不使用同步的话,程序不死是小概率问题。。。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 roguebear (旺财) ★☆☆☆☆ -
普通会员
2018/9/10 18:19:45
3楼: 这个线程里面没有UI啊?  dtbase是一个ttable,   UI是主线程。有个cxgrid连接这个ttable
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/9/10 22:13:21
4楼: 呃,cxGrid不是UI么?你在线程里操作TTable,看起来没UI,实际上这个TTable会更新关联的cxGrid呢。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 roguebear (旺财) ★☆☆☆☆ -
普通会员
2018/9/10 23:40:34
5楼: 感觉跟这个是有很大的关系。。。。  我再来把这个地方好好处理一下看看
----------------------------------------------
-
作者:
男 kuei (kuei) ★☆☆☆☆ -
盒子活跃会员
2018/9/11 7:55:41
6楼: 你在上一封‘一个困扰多年的软件问题。。。关于多线程时不时access violation和fastmm泄漏’讨论里,不是有回:
除了逻辑判断以外,所有操作(数据库读写、文件读写....等)全都用事件导到外部处理。
唉!ui的东西会不时重绘视窗画面,也要导到事件外处理,而且table不是数据库吗?
PS.事件是可以在处理完后再回传参数的。

==========
提供写Thread的经验,提供参考,
如下Code,在Execute中,除了逻辑判断以外,
所有操作(数据库读写、文件读写....等)全都用事件导到外部处理,
这样就不会影响Thread正常运行,也不会发生Lock问题。

procedure TDogThread.Execute;
begin
  while not Terminated do
  try
    if Assigned(OnJob_Get) then
    begin
        try 
          OnJob_Get(Now, 2, 0);
        except
          on E: Exception do
          begin
          ShowMsg('OnJob_Get, Error :' + E.Message);          
          end;
        end;
    end;

    SleepEx(50, False);   
  except
  end;
end;
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/9/11 9:40:28
7楼: 折腾了几年,连有没有操作ui都没理清楚。兰州这个基础概念到底是有多薄弱??

另外就是,我实在搞不清楚你为啥要在线程里去打开table?
或者说,实在搞不懂你为什么要直接打开table?
这业务到底是怎么处理的?连基本的分页都不做?
----------------------------------------------
--
作者:
男 roguebear (旺财) ★☆☆☆☆ -
普通会员
2018/9/11 13:11:07
8楼: ls两位多谢回复。
线程里面各种开关table,主线程只负责走一个进度条。因为有很多item,每个item都是后台打开。
我这几天把所有凡是我能想到的都用synchronize()封装了。。。

发现出错反而更多了。然后我把borlandmm.dll换成了bcb6原始的,就好很多,基本不弹错误了,但是时不时还是会弹,我跟踪了一下就是table->open时会出现这个错误。

之前的borlandmm.dll是fastmm在里面,是前任留下来的在同一个目录,一直用的它。。

我继续到处搞搞看看。。。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/9/11 13:17:34
9楼: 这个 borlandmm.dll 真不要脸啊,没他什么事,都要抢镜。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS