|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
moom (小新啊) |
▲▲▲△△ |
-
|
普通会员 |
|
2017/10/12 15:32:22 |
标题: |
多线程TThread.CreateAnonymousThread问题? |
浏览:1367 |
|
加入我的收藏 |
楼主: |
xe7 代码如下: for i := 1 to 10 do begin TThread.CreateAnonymousThread(写文件过程).Start; end;
执行后,发现只执行了几次。而不是理论上 i 的 10 次。 注:写文件过程 没有异常
如果不用 TThread.CreateAnonymousThread, 单纯执行 i 里面 “写文件过程”, for i := 1 to 10 do begin 写文件过程; end;
是可以生成 10个文件的,只是界面卡死罢了;
请问什么原因和如何解决呢?谢谢!
----------------------------------------------
谢谢各位大大 |
作者: |
star5 (星五) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/10/12 15:34:48 |
1楼: |
for循环中是步进,是单线程的,而你创建匿名线程后,就是多线程了,多线程在写文件时,要注意有没有冲突,如果有冲突,会产生异常,该子线程就停止了。 比如文件名是否有冲突
----------------------------------------------
博客 - http://offeu.com 脚本模型 - http://webpascal.com 需要短信接口的请联系我,可发行业与营销内容。
|
作者: |
moom (小新啊) |
▲▲▲△△ |
-
|
普通会员 |
|
2017/10/12 16:48:41 |
2楼: |
请问楼上,那上面代码 如何根据 数量 做 循环 多线程呢? 3q
因为我是从 数据库 按 记录数 进行 多线程写文件的;
----------------------------------------------
谢谢各位大大
|
作者: |
|
2017/10/12 20:35:15 |
3楼: |
你得理解硬盘自己就是串行的, 它必须一个一个依次完成读写请求, 所以搞多线程同时读写硬盘是不会有效益的, 到了硬盘那里所有访问都被串行起来了
所以对于IO, 用线程的好处就只有不卡界面, 你只需要创建一个线程然后在那个线程里循环10次写10个文件就好了, 效率比开10个线程只高不低
----------------------------------------------
-
|
作者: |
|
2017/10/13 13:47:43 |
4楼: |
楼上高见
----------------------------------------------
http://mcool.appinn.me/
|
作者: |
|
2017/10/13 19:07:14 |
5楼: |
写文件不要多进程性能很低
----------------------------------------------
|
作者: |
bdl1 (bdl1) |
▲▲▲▲▲ |
-
|
普通会员 |
|
2017/10/16 7:41:39 |
6楼: |
TThread.CreateAnonymousThread procedure for i := 1 to 10 do begin (写文件过程) end; end.Start;
----------------------------------------------
-我的博客
|
作者: |
moom (小新啊) |
▲▲▲△△ |
-
|
普通会员 |
|
2017/10/18 23:26:27 |
7楼: |
thx all
----------------------------------------------
谢谢各位大大
|
|