requestを見てSEND_REQUESTの場合にsend dataを行う以下の様なプログラムがあります。
java
1/* 2 NON_REQUEST = 0x0101 3 START_REQUEST = 0x0102 4 SEND_REQUEST = 0x0103 5 ENDPRINT_REQUEST = 0x0104 6 CANCEL_REQUEST = 0x0200 7*/ 8 9SendConnect conn = new SendConnect(); 10 11for (;;) { 12 if (request != SEND_REQUEST) { 13 sleep(10); /* wait 10ms */ 14 continue; 15 }else{ 16 // send data 17 if (!sendData(conn)) { 18 throw new ICPException("send request error"); 19 } 20 } 21}
SEND_REQUEST でない時は10回まで10msでsleepして、
10回以上で倍々にしていき最大で1000ms sleepしたいと思っています。
皆さんならどんな風に書きますか?
ちなみに自分はこうしました。
java
1 2SendConnect conn = new SendConnect(); 3 4int b = 0; 5int cnt = 0; 6 7for (;;) { 8 if (request != SEND_REQUEST) { 9 if(cnt<10){ 10 sleep(10); /* wait 10ms */ 11 cnt++; 12 }else if((10<<b) < 1000){ 13 sleep(10<<(b++)); /* wait 20-640ms */ 14 }else{ 15 sleep(1000); /* wait 1000ms */ 16 } 17 continue; 18 }else{ 19 b=0; 20 cnt=0; 21 } 22 // send data 23 if (!sendDataRequest(conn)) { 24 throw new ICPException("send request error"); 25 } 26}
何か自分で書いてて野暮ったいなぁと思ったので質問しました。
もうひとつはこんな風に・・・。
int nt = 0; SendConnect conn = new SendConnect(); for (;;) { if (request != SEND_REQUEST) { if(request == NON_REQUEST){ cnt++; }else{ cnt = 0; } if(cnt < 10){ sleep(10); }else{ switch(cnt) case 11: sleep(20); break; casse12: sleep(40); break; casse13: sleep(80); break; casse14: sleep(160); break; casse15: sleep(320); break; casse16: sleep(640); break; default: sleep(1000); break; } } continue; }else{ cnt = 0; } // write data if (!sendDataRequest(conn)) { throw new ICPException("send request error"); } }
凄い見苦しい。
みなさんはどう書きますか?
参考にさせてください。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/04 14:41