From 287d8d39128cdc9366aff269e25054a2a657d01e Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Thu, 23 Sep 2021 03:15:45 +0000 Subject: [PATCH] Prevent concurrent modification errors by combining drawing and game logic into one thread. --- Meteo_Engine.jar | Bin 12329 -> 12431 bytes src/sig/Meteo.java | 28 ++-------------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/Meteo_Engine.jar b/Meteo_Engine.jar index 11f531c586adf219a2abe974184422a9fed42981..77cac55ce18f44b76a8ec996361a5d2310e26633 100644 GIT binary patch delta 2357 zcmY*b2{;tm7at~tL1VIv7?ZIZjNKrfM})C9MkKOE*|Jp1GMPU!*~T)Gj3q)-wlqQ{ z%P=aQW$alZl|&|`9rMipeeeITd%y3Td+#~l@0@eL?<{wGvV4V{F~B`y0DgXc07WWC z$b@&7+P3XdN(5Mv4&!MD?w;whdk*q*`D>Lv9p%dUmlN!wL+5vHonXlwUA zKLU2yPhy^5%IXJs=jAlF~V zTZyn0B5{N4v+hj0p~QPFhwtfpookLNM%4I0s##TeJ%z;cCn;s~SeJ=&5OHyK^^}kE zdSo2S-{v?l#H8aX%=gqfrXv7am)OhR`1ySyq2HcTSQJVS)gblaxcZWDjVByXUQ^jh4$3JtMBNOm6jx` z&@G5gL^R?gD1o4ULA^~eo`?~}-+C2&gDi?~UH4*KC=OecUKF{Q@xAvg63w%cq0~%; zQAyoe=i@UxqrN4_9(|rYGkU-{d;qYayidf&mc2GMZpx9TaqgEE1r7I;<+pIueM$UKqPO|j#dv&| zXN*!WH7;y14M)N@g!MRZ?SLEVs>$t>74o*c0Ryts=G+d955rw**icN;+ zDvF+luJAR?ZYf#utCAPOE@ibW3y|Ip6q1I~hu*- z-hQ4M#?XE~QhnP+9^KzVB)+QL8(bBqp}6U^=x}*C=*;>2FOk#0C|xITe{mckc3lsUI7;(Nka5A6`IF+Xx~hVYg0%03&;yp75&+M1~d}SP~l7c zV_#h6Az9zX^oD`ep^^C~Ro1LHbOR{N7KUv@Kltfnc|rGZr_)%ApNsJ-+ImS!fhM6g zzNmsjSlVXhPTUkrN0S6kV;WM7^v=l|yxEY~1T(EHJUWNQ+~LQni{ zzpN(b7F&g{=VY&$8P>Y#bj*wlWr$rbgjl51P1~(cU0%*B$?kO38NaN#J+;jG(0YFW z(l{`f_{DvVf(%r&Z#nc=@Rt)-KV2(6)>HFWLhU~ENbXmN9gRsxkLuX9)2l}Ato~(S zTIM+PEb1#EtWCC7`%K4Q*;)QkM&s@el-VAVJDG%Kxc(D0)%XEnP9a6GeKG7A_SgVfHMF z{n$O67K<=2>prgbm}#g+-l!FXIf%m%b$+6eQp#$M4OK7ACKQg;#i<*XN-2xrrxCCU zxf01a$DZi*VKiB9@do+DK!4jtH?48ZAqYu`e`E`5ASK#KQ0< zNOx%O{d^CGNxY&&Y%`&N;e|gDdUXOie=C74Y@#AEk*RRI&Rgc4qIz3lkfSLH$J{1i zSWZl%udKeGe}31ly>vG9d9&V?O=)F_nP~l^RUz=^Ik8r28gvAdq54CSskyM&xSy@B zDfGCkKq-m{Cwlha(}sxOPQ4YCdi-fy&hYT!S%!3-MBPG&y`5(~f{x$fLo7mHr9uhX z$@%-B9m&gri`FrIS8O%}DVaRwl}LMiHwdujM}cF_rgn5eflOT2?JQ3LJe)2N0gs-< z)gq2ul2%*KzIw^6@k$u0Xu0O9*je}GggNsA)Zj(YYEJyvXUkk=rfW8ggo>ncOeAAh zA)h9tkIXSG^3=MPH1b@!k7<5djh)$!vD-qoF2T7e`!MkK^Nih;P2mFoe(mt|2<1>7 zAs${az`s48vZ-#wO=pxw6qnu7;En*41r2j9yMdCSm}v@Ax=}KRC{l*lId2wDe;4-i zF02^f*Y!YzVy=n!gR3NmB=8l20Dy3D0AT;GIskPD01$m92xSrB8x`=+Sm2EL&6x$1 z3@=cYvV)RT`}N%r`@b5rYgzO+(4&Va9h#=R1`3oe_yP6b@eHxQe#Gz22&+&`Q7~?l iCs8u06UcvDbM_4n4E@(NzP(&a!n<2zH)wke?(J{3Mhnsa delta 2162 zcmZ8i2{hDe8=tW+gE0*zjcgOHh8f0K3z@QwWs(wIx(Hc9%_vm>V82hTrhoeKaGxbd z8eG-03EGqbsAa7?%M#L$9bbBNgWSBlUJw!ZBj#uC7RY7dp{&IfAIPo`DGBlNNL(bc zMENbJd0(D}$Kei1;osnSh$G8@1HQm~?ZJ@0{5j$DD^Fx^&-@&AWEZ zw1}!GMLA(lyVhIG;7XMULCpGB%t#ED;!P>taX7l{G1ux+in_tXJ5fR)FLyka!zYOx z-F&mhHRui9s9&n41jg^5*s~bXmXY2E3Go|FQzB}>hG#T4lXi3$+yxqZW;zv??!`v! zU>I<7+*C8qYJHoarX?cY7zFq!?5+jkH9mril<%TJC~FwuiXLzKZr3HI1J z)#PBD@u(~JR`$LxXNOlN(~DtwdIJBmp3yyhl? z)0ZR28=eB(+&zR_=1M7v7NzWfk&{1a+oQFOneMk!a!+GXdl)|Nf>Wb46^$twCfNt% zl3X+7+t~+`7mX_?6c}kZjlh;&AzvE4NIQrk>+06OD)uE00`%yoK5O2lJ7dl$5xRz@ zP;Ix*NEJ6;u07|FzPKQzu_upH$67r0l1PSxUCW}(NFA{A;wZh)E#MDOD5yK&`;wEN zvldEDv{ZXWHFnMxt*XiL^ge5bQs2MuhuaR9lzau>icrX3qUz@#P$XE5^{-(j@xgKH z@@d>w3rbB9kZU$HqV1T^{Pbp}Zv?R+&fUssTm?U0q)4-vwGaGPU8=o0YjV7wiGcN- z=@eqOuSW^J+87@`i^^%oFB)j(Pn6b&As?@!ip85iv$Y2`5IqnuE% zG?HDnM@S9r1N{#|n^?M`-=oqtjXNfr{80-MQCz~ZHB=NW3P3W`+eXv%LM(}5`}t2c64m02)w=S?QBU`WQ%%! z{J>pYo@QS`KTExdn#**-MW`&f#UFiUR8R&Po*dLq#1OF4J6S$61xA#n3cOcR(n8h^ zX4y1)j(%D@-`CIywK^yU^y+2y-!V0gYG{2a;vwgi*yz_j`$2qz)p92_W{6iQzR#}J zA5FCPbFon_bcjydpZq5BaAL#Frwt?6wk?cU`IKRx0>?p*JbvdupaX725pQ|-+_d_W zpOs0M(I;CNrkl4!WMm}8P3c7w_BK04h}Sz3lHiIW2v`>1zL>B9q^h59nD?7FZWU>7 z?UqV+2q%MW^C~P(DPJ_Sdrs>kDmYIi4>eK?W%Ha@v}k>2EQ6wJ33)+rB+|u&QrvrP zdB7}-V|YQOQ>`Yd%)2hc@PrJ9eKbG%ahwpeWh_8p_BARRmB3DNk zm$+4(SCd-|cSbZ%s){K=+I+1eW~*;4aNYVyp?L_6C#xt+BK}X6JO(M`52ax+Dr%BYlOzBBC?JqL=+|YA zq*Y?}3o%t`^BC2Ca(~4v_iHNXk|u30Rz+~JBNnOduMGl`gM%<6-|&Dieg80DGWq{N pq;A9es6%7vYYS>zwjmYk(o}aVD3XYxVuH>x+gopYJX2`F>2D-uwebJ| diff --git a/src/sig/Meteo.java b/src/sig/Meteo.java index bfbf63a..8fe2767 100644 --- a/src/sig/Meteo.java +++ b/src/sig/Meteo.java @@ -33,6 +33,7 @@ public class Meteo { public void run(){ while (true) { long startTime = System.nanoTime(); + runGameLoop(); p.repaint(); long endTime = System.nanoTime(); long diff = endTime-startTime; @@ -45,32 +46,7 @@ public class Meteo { int nanos = (int)(sleepTime-(((sleepTime)/1000000)*1000000)); //System.out.println("FRAME DRAWING: Sleeping for ("+millis+"ms,"+nanos+"ns) - "+(diff)+"ns"); DRAWTIME = (double)diff/1000000; - Thread.sleep(millis,nanos); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - } - }.start(); - - new Thread() { - public void run(){ - while (true) { - long startTime = System.nanoTime(); - runGameLoop(); - long endTime = System.nanoTime(); - long diff = endTime-startTime; - if (diff>TIMEPERTICK) { //Took longer than 1/60th of a second. No sleep. - System.err.println("Main Game Loop took longer than "+TIMEPERTICK+"ns to calculate ("+diff+"ns total)!"); - } else { - try { - long sleepTime = TIMEPERTICK - diff; - long millis = (sleepTime)/1000000; - int nanos = (int)(sleepTime-(((sleepTime)/1000000)*1000000)); - //System.out.println("Sleeping for ("+millis+"ms,"+nanos+"ns) - "+(diff)+"ns"); - GAMELOOPTIME = (double)diff/1000000; - f.setTitle("Game Loop: "+GAMELOOPTIME+"ms, Draw: "+DRAWTIME+"ms"); + f.setTitle("Game Loop: "+DRAWTIME+"ms"); Thread.sleep(millis,nanos); } catch (InterruptedException e) { e.printStackTrace();