Project1

标题: 求教关于线程的问题,HELP!!!! [打印本页]

作者: yyq8092    时间: 2013-7-7 17:19
标题: 求教关于线程的问题,HELP!!!!
本帖最后由 yyq8092 于 2013-7-7 17:33 编辑

由于在进入战斗和地图时需要加载大量数据(10MB数据,我想瞬载),就会把主线程卡住(2-3秒),不知道该如何利用线程来解决此问题呢?
我是这样写的,但是没有效果 ,还是卡住主线程(2-3秒)然后才加载完成,完全不像一个多线程

RUBY 代码复制
  1. def load_bitmap
  2. bitmap = [] # 图片组
  3. threads = []
  4. pages = []  # 数据包(就是一个资源数据包,就用[]代替)
  5. for page_to_fetch in pages
  6.   threads << Thread.new(page_to_fetch) do |data|
  7.      # 加载数据代码
  8.      file = File.open("temp.tem","wb")
  9.      file.write(data)
  10.      file.close
  11.      bitmap.push(Bitmap.new("temp.tem"))
  12.      File.delete("temp.tem")
  13.   end
  14. end
  15. threads.each {|thread| thread.join }
  16. return bitmap
  17. end

就是从一个数据包中读出数据然后写出最后进行加载



作者: end55rpg    时间: 2013-7-7 17:28
。。。你用再多线程都一样。。。。他虽然是同时执行2个线程你一个卡了其他的还不是资源就少了
作者: yyq8092    时间: 2013-7-7 17:32
end55rpg 发表于 2013-7-7 17:28
。。。你用再多线程都一样。。。。他虽然是同时执行2个线程你一个卡了其他的还不是资源就少了 ...

有什么办法解决么?
还是说我这样写的线程是错误的?(一直感觉好像不是创建了线程,而是是在主线程上运行的,,毕竟我用其他编程语言写加载数据时用了线程就不会把主线程卡住,这个完全卡住主线程,压根不符合多线程的特征)
作者: yyq8092    时间: 2013-7-7 17:40
end55rpg 发表于 2013-7-7 17:28
。。。你用再多线程都一样。。。。他虽然是同时执行2个线程你一个卡了其他的还不是资源就少了 ...

那为什么感觉还是在主线程上运行?
作者: end55rpg    时间: 2013-7-8 13:39
由于ruby的线程不是一个native的线程,因此 ruby的线程都在同一个进程里面.
作者: 亿万星辰    时间: 2013-7-8 16:55
载入大量的图片,不如一开始就用个临时bitmap载入一下,貌似是有用的……
作者: 灼眼的夏娜    时间: 2013-7-9 09:18
不论ruby线程模型是怎样的,至少 你那个 join 就是 把线程添加到主线程执行的(o.o




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1