HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0721
k5342ファイルのDLについて18解決


k5342

リンク

2011/7/21(Thu) 14:00:45|NO.40042

ファイルをDLするときに、進行状況表示するために
ネット上のファイルサイズを取得して、netrequestでファイルをDLして、
DLしたファイルをexistでサイズ取得し、%表示するようにしています。

で、困っていることがあるのですが
ファイルサイズを取得するときに画面が何秒か固まってしまいます。

「しばらくおまちください...」でなんとかごまかしているのですが、やはり違和感を感じます。

画面を固まらせないようにファイルサイズを取得する方法はありますか?

今は、netinfo (←ちがってたらすいません)で取得するようにしています。
わかりにくかったらすいません...



この記事に返信する


WHOS

リンク

2011/7/21(Thu) 15:57:02|NO.40047


ファイルをDLするときに、進行状況表示するために ネット上のファイルサイズを取得して、netrequestでファイルをDLして、

ファイルサイズなどにも問題があるかもしれませんが、
その前処理(perタグで囲んである)にももしかしたら問題があるかもしれません
念のためですがスクリプトを提示してみて下さい



k5342

リンク

2011/7/21(Thu) 16:05:08|NO.40049

スイマセン
外出先から(Mac&USBメモリもっていなかった)で投稿したため、
コードをのせられませんでした。

いまも携帯端末で、ソースをのせられません。
今日か明日くらいには再現できる部分をうpしようと思います。



ORZ

リンク

2011/7/21(Thu) 21:19:30|NO.40063

ネット上にあるファイルのサイズを一瞬で調べろ!というのも無理な話では?
サイズを教えてください→わかりました調べます→結果を送信します→受信しました、という
流れがあるのだから、多少の時間がかかるのはしかたがにゃい。

数秒、というのも個人の感覚だから何とも言えんが、具体的にどのくらい固まるのだらう。



k5342(MyPC)

リンク

2011/7/21(Thu) 23:31:33|NO.40076

>>ORZさん
えぇと、現段階で(サイズ取得に)10秒...
たまに、「〜は動作を停止しました」が表示されるほどです。

>>ソースコード

os=sysinfo(0) split os,"Windows" if stat-1>=1:os_1="Windows" if os_1!"":os_2=" "+os_1+"" ; ; ファイルを取得 ; screen 0,750,550,,(ginfo_dispx-750)/2,(ginfo_dispy-550)/2 title ""+softname+" [Build="+build_no+"]" redraw 0 ; gradf 0,0,750,550,1,$333333,$111111 color 255,255,255 if os_no="6.0" or os_no="6.1":font"メイリオ",15,0:else:font"MS UI GOTHIC",15,17 pos -1000,-1000:mes"ファイルを取得しています..." pos (750-ginfo_mesx)/2,(550-ginfo_mesy)/2-50:mes"ファイルを取得しています..." dlurl="http://dl.dropbox.com/u/253XXXXX/SNV-110011/" dlfile="os_data.snv" prx=(750-300)/2 pry=(550-30)/2 redraw 1 title softname+" - ファイルを取得しています... ["+wariai+"%完了]" ; #include "hspinet.as" #include "hsp3util.as" #include "hspsock.as" netinit if stat!0:goto*main ; ipget if refstr="127.0.0.1":dialog"インターネットに接続してください。":mode2="[オフラインモード]":goto*read ; #include"dl.hsp" if dlf=1:dialog "取得エラーが発生しました":mode2="[オフラインモード]":goto*read clrobj pos prx,pry:progbar 300,30 ; dlfile="genre.snv" ; infosize=0 data_infosize=0 info="" netinit neturl dlurl netfileinfo info,dlfile notesel info repeat notemax noteget data_infosize,cnt split data_infosize,"content-length: " if stat-1=1:break loop data_infosize=str(data_infosize) split data_infosize,"content-length: ",dst,infosize ; netrequest dlfile neterror er if er!"":dlf=1 ; infosize=int(infosize) ; repeat exist dlfile if infosize=0:else{ wariai=strsize*100/infosize ; ; netexec res if res > 0 : break ; バーの位置指定 (PBM_SETPOS) ; 第3パラのwparam値に位置の数値 sendmsg hProgress, $402, wariai ;if wariai>=100:break title softname+" - ファイルを取得しています... ["+wariai+"%完了]" gcopy 103,0,0,1.0*300*wariai/100,30 wait 3 loop } ; pos prx,pry:progbar 300,30 hProgress = objinfo(stat, 2) if dlf=1:dialog "取得エラーが発生しました":mode2="[オフラインモード]":goto*read clrobj if dlf!1:mode2=""

※抜粋です。
※一部アドレスはふせさせていただきました。
※わけわかんない変数があったら聞いてください。(他の部分で代入されたりするので)



k5342(MyPC)

リンク

2011/7/21(Thu) 23:33:04|NO.40077

追記

先生は、「情報取得を5秒-8秒ていどで済ませなさい」というのですが...
可能でしょうか。



ORZ

リンク

2011/7/22(Fri) 10:40:13|NO.40088

#includeの場所がちょっと妙で困ったな。あと動作検証しようにも、dl.hspなるファイルは
俺のcommonフォルダには入っていないので動作検証不可能。きちんと動作する物を書くように。
それから、『ここがファイルサイズを取得している場所です』などのコメントを書くように。
肝心なところほどコメントがかき消されているように見える。

とりあえずnetinitが複数回呼ばれているのを何とかしてみたらどうか。



ORZ

リンク

2011/7/22(Fri) 10:45:15|NO.40089

参考までにだが、こんな風なプログラムを書いてみたところ、取得は一瞬だったぞ

#include "hspinet.as" netinit neturl "http://dl.dropbox.com/u/XXXXXXXXXXXXXXX/" netfileinfo info,"XXXXXXXXXXXXXXXX.jpg" mes info
dialogやmes命令をばら撒いて、具体的にどこで時間がかかってるのか検査したほうがいい。



k5342(Mac)

リンク

2011/7/22(Fri) 12:38:50|NO.40090

外出先から、失礼しますが
>>ORZさん
dl.hspは何回も使うので自分dね作ってみたファイルで、可憐とディレクトリに格納しています。
で、なかみはこれです。

何個か、上のスクリプトに含まれていた部分は置き換えたのですが、
残ってしまっていたようです。

<dl.hsp>
infosize=0
data_infosize=0 info="" netinit neturl dlurl netfileinfo info,dlfile notesel info repeat notemax noteget data_infosize,cnt split data_infosize,"content-length: " if stat-1=1:break loop data_infosize=str(data_infosize) split data_infosize,"content-length: ",dst,infosize ; netrequest dlfile neterror er if er!"":dlf=1 ; infosize=int(infosize) ; repeat exist dlfile if infosize=0:else{ wariai=strsize*100/infosize ; ; netexec res if res > 0 : break ; バーの位置指定 (PBM_SETPOS) ; 第3パラのwparam値に位置の数値 sendmsg hProgress, $402, wariai ;if wariai>=100:break title softname+" - ファイルを取得しています... ["+wariai+"%完了]" gcopy 103,0,0,1.0*300*wariai/100,30 wait 3 loop }



k5342(Mac)

リンク

2011/7/22(Fri) 12:41:32|NO.40091

>>ORZさん No.40088
基本、ファイルの取得〜DLまでは、すべてdl.hspですませてあります。

上のきじ(No.40090)のソースコードで行っています。



kitu

リンク

2011/7/22(Fri) 13:37:15|NO.40092

ファイルサイズの取得に時間がかかる、というのでしたら
その部分が再現するコードだけを貼っていただければオッケーですよ〜

ORZさんのコードいじって実験してみましたけど、
それほど負荷がかかる処理ではなさそうな…?
サーバの応答自体が遅かったりしたら、どうしようもないかもしれませんが^^;


#include "hspinet.as" netinit neturl "http://hsp.tv/images/bbs/" netfileinfo info, "mascot1.jpg" info = getpath( info, 16 ) index = instr( info, 0, "content-length: " ) if ( index != -1 ) { sdim fSize, 16 getstr fSize, info, index + strlen( "content-length: " ) mes fSize }



k5342(携帯端末)

リンク

2011/7/22(Fri) 15:41:24|NO.40093

じゃぁnetfileinfoが原因と言うことではなさそうですね...
Dialogをいれて確かめてみます。



k5342(携帯端末)

リンク

2011/7/22(Fri) 15:46:01|NO.40094

なにか他の部分で問題があるのでしょうかね...?
一応、環境をのっけておきます。

>>OS
Windows 7 Home x64
>>RAM
4GB
>>CPU
Intel core-i5 2410M
>>型番
LL-750DS
(NEC)



backdrop

リンク

2011/7/22(Fri) 17:11:39|NO.40100

>Windows 7 Home x64
あ、やっぱり皆最近64bitなんだ…
余談ですがあんまり64bit好きじゃないです。何かと開発しづらいし。

>Intel core-i5 2410M
基本の2.33Ghz以上だから、スペックが原因ってわけじゃないな
ファイルサイズにもよりますが、常識として回線が長くなるほど、つまりサーバーが遠くにあるほど遅くなります。
コマンドプロンプトのtracertで回線経由を調べることができますが、どうでしょうか?
もしかしたらHSPでは解決できないかもしれませんので。



k5342(MyPC)

リンク

2011/7/23(Sat) 01:11:19|NO.40115

ちょっと#incude方式をやめて別の方法でもう一回つくってみます。
ひとまず、解決ということにしておきます。
回答をくださったみなさん、ありがとうございました。



backdrop

リンク

2011/7/23(Sat) 01:33:03|NO.40118

>ちょっと#incude方式をやめて別の方法でもう一回つくってみます。
どのみちDLLは使わなきゃいけないから一緒な気もする



にゃんちゃん

リンク

2011/7/23(Sat) 22:15:47|NO.40133

こんばんは。
予断なんですが、スクリプトに書かれていましたが、ネット接続されているかどうかを簡単に調べるには「getip」をつかうことができるのですか?



backdrop

リンク

2011/7/27(Wed) 13:13:54|NO.40232

getipはサンプルソースコードですか?hspinetにそんな命令はありませんよ
何にせよ、127.0.0.1って出てきたらオフラインなので、それで識別できます



backdrop

リンク

2011/7/27(Wed) 13:15:25|NO.40233

↑違った。多分ipgetをうろ覚えしてたんだな。



ONION software Copyright 1997-2023(c) All rights reserved.