Project1

标题: Ruby中的Thread类为什么多网络访问无效? [打印本页]

作者: ky52879    时间: 2014-6-18 13:24
标题: Ruby中的Thread类为什么多网络访问无效?
大家都知道Thread类是ruby的线程类,他可以很方便的让我们在游戏进行的过程中搞一些
其他的事情,比如之前经典的10s刷新脚本等等,但是最近小弟在研究网络接口的时候,发
现线程没有任何作用,很奇怪,希望有大神一起讨论下看看如果实现线程?

伪代码如下:
RUBY 代码复制
  1. Thread.new do
  2.         # 定义网路连接API
  3.         InternetOpenA = Win32API.new("wininet.dll","InternetOpenA","pippi","l")
  4.         InternetConnectA = Win32API.new("wininet.dll","InternetConnectA","ipippiii","l")
  5.         # 建立网络连接
  6.         hOpen = InternetOpenA.call("FTP CLIENT", 1, '', '', 0)
  7.         hConnection = InternetConnectA.call(hOpen,"xxxx",'xx','xxx','xxx',1,134217728,0)
  8. end


上面是一段利用Thread类访问网络的代码,理论上我把它放到脚本里面去执行,然后应该和主进程并行才对,但是事实上却是这个
线程执行的时候会将主线程卡主!!!求高手告知原因。。。
作者: fux2    时间: 2014-6-18 13:51
同步连接本来就是阻塞线程的,而ruby的子线程阻塞好像也会导致主线程阻塞。
ruby中有纤程或许能解决这个问题,但rgss里却不支持、

而异步传输需要回调函数,不自制启动器也是很难办到的吧。
(其实@晴兰 有s20系列的黑科技,可以简单做到。)
作者: ky52879    时间: 2014-6-18 15:57
fux2 发表于 2014-6-18 13:51
同步连接本来就是阻塞线程的,而ruby的子线程阻塞好像也会导致主线程阻塞。
ruby中有纤程或许能解决这个问 ...

话说什么是s20黑科技{:2_257:}?
作者: orzfly    时间: 2014-6-20 01:06
兰兰的东西都太黑了你们是看不懂滴……
https://github.com/Artoria/RMSFX/blob/master/s20.rb




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