导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
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 ); }
----------------------------------------------
-
作者:
2018/9/9 23:13:05
1楼:
你在线程里操作ui?
----------------------------------------------
--
作者:
2018/9/10 9:02:57
2楼:
线程操作UI不使用同步的话,程序不死是小概率问题。。。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
2018/9/10 18:19:45
3楼:
这个线程里面没有UI啊? dtbase是一个ttable, UI是主线程。有个cxgrid连接这个ttable
----------------------------------------------
-
作者:
2018/9/10 22:13:21
4楼:
呃,cxGrid不是UI么?你在线程里操作TTable,看起来没UI,实际上这个TTable会更新关联的cxGrid呢。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
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;
----------------------------------------------
-
作者:
2018/9/11 9:40:28
7楼:
折腾了几年,连有没有操作ui都没理清楚。兰州这个基础概念到底是有多薄弱?? 另外就是,我实在搞不清楚你为啥要在线程里去打开table? 或者说,实在搞不懂你为什么要直接打开table? 这业务到底是怎么处理的?连基本的分页都不做?
----------------------------------------------
--
作者:
2018/9/11 13:11:07
8楼:
ls两位多谢回复。 线程里面各种开关table,主线程只负责走一个进度条。因为有很多item,每个item都是后台打开。 我这几天把所有凡是我能想到的都用synchronize()封装了。。。 发现出错反而更多了。然后我把borlandmm.dll换成了bcb6原始的,就好很多,基本不弹错误了,但是时不时还是会弹,我跟踪了一下就是table->open时会出现这个错误。 之前的borlandmm.dll是fastmm在里面,是前任留下来的在同一个目录,一直用的它。。 我继续到处搞搞看看。。。
----------------------------------------------
-
作者:
2018/9/11 13:17:34
9楼:
这个 borlandmm.dll 真不要脸啊,没他什么事,都要抢镜。
----------------------------------------------
(C)(P)Flying Wang