From 46f445810aa67f05de0cccdee57b675e81ddd13b Mon Sep 17 00:00:00 2001 From: Dennis Eckerskorn Date: Sat, 7 Dec 2024 20:07:04 +0100 Subject: [PATCH] Fixed issues with threads where window wouldnt close as Tetris interfiered with tkinter widgets, threads are centralized now --- .../system_monitor.cpython-313.pyc | Bin 4709 -> 4709 bytes .../__pycache__/tetris_game.cpython-313.pyc | Bin 8611 -> 8636 bytes .../__pycache__/threaden_task.cpython-313.pyc | Bin 1321 -> 1361 bytes .../threads_manager.cpython-313.pyc | Bin 7836 -> 9280 bytes src/services/tetris_game.py | 6 ++-- src/services/threaden_task.py | 3 +- src/services/threads_manager.py | 26 ++++++++++++++++-- .../centered_window.cpython-313.pyc | Bin 11341 -> 11663 bytes src/ui/centered_window.py | 9 +++++- 9 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/services/__pycache__/system_monitor.cpython-313.pyc b/src/services/__pycache__/system_monitor.cpython-313.pyc index ce33be4bccec7c4852145e266b19592cb4a9cde2..0953971745727e1ed5321c2311d0917c1d72253c 100644 GIT binary patch delta 20 acmaE=@>GTUGcPX}0}yD=3E9XUB?JIL`~`LZ delta 20 acmaE=@>GTUGcPX}0}$A025sby5&{4}(*+g) diff --git a/src/services/__pycache__/tetris_game.cpython-313.pyc b/src/services/__pycache__/tetris_game.cpython-313.pyc index 23cc510fd86abb6018519de15a287f8905822765..f8b964b272ee86723e6d906060c4347d44002633 100644 GIT binary patch delta 1019 zcmZ8fO-NKx6rTI$z2`Xp(;H=e^^IaWmd=cs5ls<}StvRnX+efP^vyVsGj?apG9ufE zi$dbGXd$%d2O=V3h$w_`5m69f8)J4ZT11P2epZIv^WKQsU3~A{?|%0?=bd}*C6*Gl zpEjG>z*ghp$@HUVwsRcmE@rt=LIUu~*g=M&l0R!t8^T=wj1cctFCPgT;Wpm{@Ax)S z2kU$tGz;I8^~`}HgpHKjjJKjNuO0peJGAA?x)F?vL!<#-iw{W%B7zsLRs69upzm&k zMwm6V?%2OHEi>hn${%7`aKYR{qHx!Ip3zpz(@lEWa*u?Hsx?SlXxIOBgRMT(qZS51KTQQM`4cc z(i9krvp~c9`QJ1XcAs| zo-_AJua}bvT(9t1n;4HvxoR-LnzI^)c@sSFI-uPo!CS8%e)}cHnPI~#kV;r~O5pK1 z;e-!a8+6vV1>>M$zz&K}POyU{`EG}86Guc#bM7@;B7xJ`=QS=l7 z7FH6enjKSVNl;P+_OVP&jwuCoB&|%Sw3Z3-%*asw#TlK61`8d^QZp{C8kM{7|b4S@l+QA?!=sj#h0vk!&5%$B4z#Qw5 z6g)&~AsOt{hlprH^f-8s5DH&v8Y~4A*C6DIRka=DFnUtWUGFt+`w+JNbqKdXgdD;I v!ZgAR%*&?<2WxVYrH+L>9(C$Lr1yMwighB`in4rZ}zG6tQfu%J40ACBHMh(VD zJQxWXZyt;xdhuXPqsGLGe}FL&4`eS~HC{*{#+dl=W|t~;lKo}g%oKYZld$#uBtmmnnc0J!9exJlt6*UaG|HQ%iWkP{m1 znr(4mCYDpD;;}S56xv7&d=P^CCyNh03*UziGHHsS@RTe1|2##|lm9^pcki+x1jocN z5`q=+DG9=s+Y19_-)te&J&e!@gO-+(^Rnd~WA>JBi+h9)>rv7Qv(^*~Z&;rf!*^}# zBv@#+OT>wCkuSfQ6-6&O8rh?_9j_Usv*HM;IgXE2B2*wa5l(>9UBl4`tW~awK^B?j zp{Jr6!c`B>?W>R_6pp&^Mg)D4)}TLtFo;mf&5A50>qfnp?uR<(JgeiL^E~M& zvCAG&%BY+9v>#yt0V~l&s%BKBgtKro! zxcx(dy_On_b;JL&>F*3_D35RzuGW>L!+k<+Tlsv3frh=sguYsC-t)FK9iz^ zT!CNphiqBo=%Wu5S_18)3#ANEV|IANb=cR+I36Vgy@51(O9***EKd*~e#pc9IBtp~ zR?J#iE}6)%hBYpiqza2^VqYw?6wB%aI*C-Bk9(w9!s+>$#gy7j@4)?rBLZgr0JCJ^ Ad;kCd diff --git a/src/services/__pycache__/threaden_task.cpython-313.pyc b/src/services/__pycache__/threaden_task.cpython-313.pyc index eb9c2f781e29609d5f505ea0e740c78185fbddfa..eddb8e9b50bc1023484b91476766ff3e509be014 100644 GIT binary patch delta 246 zcmZ3%V0a)d)4|fibAy||-@4!W29H3$cc=Gt9+`_gG7ADPfN1p_QgR(Gz1|;K zC!4bbFv?8sU~y+;oqT~s(m@$$L=iuT-~kf1IBatBQ%ZAE?TS=@T#%i`qCnyUGb1D8 VZ3ck{48Gr4gc#*NF#rj$HUJpmJWK!p delta 172 zcmcb}wUUeXGcPX}0}!kf4oWZB$ZNsO#RTLr1M%mq$^OhnjM9@6m?b99ViuWf!^ADl zl+L8dT*dE_T9TQXm#UDOqmYrAlkYb94YMPo>SR3@1=g!Pavzu{$Fl@5N=@Ft;%>si zDqqA8G_HsRNN6$@iNM%JiXawPiU-KL#bJ}1pHiBWYFDH*S({aoSCCQu69bR{D**s) CdnHN$ diff --git a/src/services/__pycache__/threads_manager.cpython-313.pyc b/src/services/__pycache__/threads_manager.cpython-313.pyc index 8162fb8102745565fa30fd1c3399537442c5d84d..70d9f2db71c01e79800b0ffaf61706347b04a2fa 100644 GIT binary patch delta 2695 zcmZWrTWlN06`fh`^08b#M6M`mDT=EnMM;%xP^vAPlB4R;SdInMlxi1FL2aoO!$cyP zS;}!#$1>0&v04|gJAJrlfEZ|zI(?vO^;4uDP2r+n`4F4L>u!}azX9?g(c8$XNp9ga{-ZNE(Op$lk&HjG9fQp{&Zl4#ek;(-O>A!-@&P~s(IHsL`H_&fIF3-q$6nG%H(YKJASmKL?Lo-v*`%KA#CW{Kr^N;9-_ z86h9#3DkKG_%XrN?2nLrg9etFZF3y5x6zgN@QCB*=kD7;Wb|VRNWtqvX0W3Y?6~!H z)19oillLV5%QG7@*I%eeU8dAmk@{{=n*9@%{)u;`$z2k+bLQ2?q|j)b%y{Y`rO z3;D(3T9mCV>gr0dkS`Yz*;!VNJaxZDSl#=q1Jkn!2WlW%Eg?^~NfsLAV#yLpC|@YE z_|+27fmREJd?8oQN{cU$RJV9t7_OtSWYhXP|v>D$eItfV~>&+}oZeEN?hPjFdLW z;s1#$j``y2uLF?db9@^(Pm6#J2hhR*6ySMU$ZVupu#?<=y2J>Q72r6`@wN97TmqxE z7+8V{VXb>2pC!>Hk<_x~Rc$%Hre*WR0*hy@R8$H%v6(>PXt)`u_Csl=kkT6Vn)A662-9Gby23D*1RPc%er2&TvHdbdZ|pVf%?dD zy-Y1X)c2~C>g~dXP;{LlFGIy~vS$2(5Rw$$z{^i>Jbg1-@y1Q>AbEB zM;_bp%Rd&sFWyZ4z_;r<3w*)Po%ObN@IN1mK#o2DoF}y7Z`=+KZ)%(A?a;_O{$u3- zC%XdK_^&}C2X1}IIU#~OqBzlSyCZui;PSwJ41JN1{eqz@9e7ddfnVABp7a+Ey73v`ZPGqI@%4LX)-a!5xk3Pc$bTFz z;FA9c0sQ;Q1>D-uFnof_Q`aUqOUkYyq!-E=3bqV7_hc#86eZJyXhesCFE>O36#qV? zxRr3#69WIHAv(+eS|-q>xmT3sZmsP3a1;7!Xm!bI7KY`TjRhug(K!yOU~)#3~9y78G=nE z9ckrNq}Nh*mNMbgI~oz3imi! z9@~lBU&Bc|yVP0yX}AYIhkKe!wf?&G`{oe{J@_N#(irV~Yk`R(ad*)mxLQz2VW49w zI$*3NWQ(f=K|d2idZQ`)S|kZKuoXG-H5LGRUc$Lwk(M24g~j5E<)Ckh!ZaX=*}ET( zdUISRTP(~Ab>rH}g4Ke56={Lr!Y{R4h|)6>JOl9>oHOrIm9q&yR-z}?>GuI@p@eiU zfCee)qNIZom6A3}&QikkH)b+MSu5wW8QQ_~-&if{Mkez*U>&skykC)89FOsv2|?Hk_{bQ$Y*t9;J^n2qH$+;Ko{wZdV*cfa;8>_i>u4}7`jB( aXayME_}NxPeh>8hn;++3qzWiyBL4@K7lQ-< delta 1685 zcmZ8hOKclO7@o2B;YaMe){okWvrbf!tw@@_A9*yTq#}tDg(gADrOx7Pja9!iyN+lC zYPp~yAt3sNP*G2mLo1M4DdOG(a4RAbYG5m95A;wD;JQd$nSbmwg_ZX6c;^3SzW@8b z*}Jb@9}7PVg#v^>CyaBsZ`wA(aXP=zKNgRZUa}x1$bx*tgUf_4Uyd5e#?}5?b1cn`L+`?! z)+CgoD*P_h)g?lf$hiPKl{=v(Zzwq_CmAw?)We-98$(j8g~OZ?V6CvMj*R0uEQSzA zKnku_t*n}km9a0`yvR(0gyCrr+ruMlR9W!(TOC$#I(a935v_#>1f9l0m&uj#4`Mcnr?3X(T zS)g#+A8jkhxGz3APtId_;oX2fadys7SSz1%l{K?awYb8zQ?7{08mg+SS}NsBxn@PY zpQe3rx1@c+q1T6azP-xf3VEc(Kbzi|-q!YRX?yQ${a0W8xuxynsSl<;ntAFak%5{* zB73&A!7XiYTRXg^9loy}{a?(nngTxtyCsxl^IB_-o=2HkKZ59Us3~|uX@hX&xDc9VN@E%I^* zjV0>5a)n#zc4UN3!^3C-5>&gZ>kVgdQENre3f z!wBL&2wt-AwX2?0E5IaXtEW4`-Ru#`TwDB7Um;l5@Y_}EpLSz0X@T@`=1XV|U` zyTvyzb(SZH?N^#r>hLI?rbY1du65(~h9sQYxJ5!*+-=Tig-?4=UFP?gumnOcf`O1m zNFktNYz{%^;6^eT+cBMdHe)*c6ZmG;vFuFd77<^JMmH4TN-}qn`51!}WwJ!}-2w7qS#N+>5W^SQPmNjxN9_edCK_k(F^m#A1V7-)OPC rS}j=PjPbu{WxJ0<%}XhLKw2M=puo^$vj10d;2)_#X|hfb#U}p(F_d;> diff --git a/src/services/tetris_game.py b/src/services/tetris_game.py index 318e45f..8c48ee0 100644 --- a/src/services/tetris_game.py +++ b/src/services/tetris_game.py @@ -10,13 +10,13 @@ class TetrisGame(tk.Canvas): self.grid = [[0] * self.cols for _ in range(self.rows)] self.current_piece = None - self.running = True + self.running = False self.init_game() def init_game(self): self.bind_all("", self.handle_keypress) self.spawn_piece() - self.update_game() + #self.update_game() def spawn_piece(self): shapes = [ @@ -106,7 +106,7 @@ class TetrisGame(tk.Canvas): self.rotate_piece() def update_game(self): - if self.running: + if self.running and self.winfo_exists(): if not self.can_move(1, 0): self.place_piece() else: diff --git a/src/services/threaden_task.py b/src/services/threaden_task.py index 30c88d3..d0fea81 100644 --- a/src/services/threaden_task.py +++ b/src/services/threaden_task.py @@ -19,4 +19,5 @@ class ThreadenTask: """Detiene el hilo""" self.running = False if self.thread: - self.thread.join() \ No newline at end of file + self.thread.join(timeout=1) + self.thread = None \ No newline at end of file diff --git a/src/services/threads_manager.py b/src/services/threads_manager.py index 0035300..8db2c52 100644 --- a/src/services/threads_manager.py +++ b/src/services/threads_manager.py @@ -5,6 +5,7 @@ import random from services.threaden_task import ThreadenTask from services.system_monitor import SystemMonitor +from services.tetris_game import TetrisGame class ThreadsManager: """Constructor""" @@ -15,6 +16,7 @@ class ThreadsManager: "time": ThreadenTask(), "temperature": ThreadenTask(), "emails":ThreadenTask(), + "tetris_game":ThreadenTask(), } self.system_monitor_tasks = {} @@ -41,20 +43,40 @@ class ThreadsManager: metric ) + if hasattr(self.ui_instance, "tetris_game"): + self.tasks["tetris_game"].start(self.update_tetris_game) + def stop_threads(self): """Recorre tasks y para los hilos""" - for task in self.tasks.values(): + for name, task in self.tasks.items(): task.stop() + print(f"Hilo '{name}' detenido") - for task in self.system_monitor_tasks.values(): + for name, task in self.system_monitor_tasks.items(): task.stop() + print(f"Hilo de monitor del sistema '{name}' detenido.") if self.system_monitor: self.system_monitor.running = False + def update_tetris_game(self): + """Ciclo de actualizacion del tetris game""" + while self.tasks["tetris_game"].running: + try: + if self.ui_instance.tetris_game.running and self.ui_instance.tetris_game.winfo_exists(): + self.ui_instance.tetris_game.update_game() + time.sleep(0.5) + except Exception as e: + print(f"Error en update_tetris_game: {e}") + break + + + + + def update_system_metric(self, metric): """Actualiza una métrica específica del monitor del sistema.""" diff --git a/src/ui/__pycache__/centered_window.cpython-313.pyc b/src/ui/__pycache__/centered_window.cpython-313.pyc index 3bdf8ae999aed4bb23819042842aa726119bb059..d8115cf5a66962e4ed6e96cc6e565cacfdfcd59a 100644 GIT binary patch delta 1554 zcmah}O-vhC5Z?8AZDTK(fGH3!*pwf8iB%|y)ucfx0SAI2euPb-p^dYK^$+-myj>HT zNCA#iZ6O-9MQIPop(UtN)X1l*QVvynsL~!*1v%PYa;PeCsZyG%s?kN-F z{3e+&8#I+|e|cf#AmzbZQwRQbSLG3V{E#(GIN&#n2%9wFd5_C-hK9*L_`=-?!ycEF z#oQB4l$a-(iDT4g;!F|;pW3_=hC@>{l2W4yIirk96{LoW4MEj%i%~5}6nRcHtVvmw zHH{Ej24h%BKATNt6GlZzgmDJ1$?Ae?n2~{>Y`rVjsdANhY!iw$w{CM6ZGPS6-?erA z?5Np1xz$v3_;iQwZm1aO)dRi705w97gzBOo>VjAlI&`69SMWb}G;D>6VwWy<6~&+~ z27hz}ODc~pc#1;1F0|jy=)%dOa9S5m?+Rz=c^ksI@LpBnR7DTRj=+Mj@3}xrAw3jS z`s&Oo>A?L6!YGANP%H1U;~-XbJx4hP^Hp0^$vH#MQI13084C>I5rY)=KcpaWWSTC9 zbvBpD$k{n^mhN^;q^yFc&NU1A$tAd6-Ommd9#lW!hx?H^0*NOfB+gMVEXwjCrojVB zNm5Vg^(0d%uVG0lsYFtvTNINk@aGGC;UzRLQjpAtG!jP%NFH4*xl&%Ruxs|PCKJs& zM0-qYEf}urQ&bXM!kv2@C-?KwlNsaPYe&8j}WYh#1Rt6+6N*F5n6jJw`{P} zBnb~*++nv1$<}+E1M4RE=R^je#piM?qj?+Q7WDZtE2U>DjTm=0A?U+VlI;JTZrEcv zP0MAXF?!h;bsCobu}EZWgnWi_EX8o7vhiFrEyt9!YFL)!bY4-(EG9A$5moO}P_Y#6 z;UIJ~3Pb+hfDt81f++iH5#+$L$0d*hp% zF3l?Q3q%>HJ#NYvOxz!@enm4@)V=RVJQ&wbwa zoaDo+Pm-=b+S(ij{G1BUX4i!8Tv0px?QgLpk-81>mLqV>)djo9>~P)sOf1X7##&%n zl%-`+kP5P!!fQIR-8;|>D)n#D!4Eh@#LC};QyeA+bfW)|G*e9KBYPr`uvEIU(Q za_?EDP7?Dkgf09u5oZuIt5hvfnK&_2B>yMFw;1)hnl&fovpE$XDVeXp{Uhtplqt2f%NwW^ZJ^W{_)Yw`u~^gd?E`fjhsXxYFW&91i|?SdzEyD>8a z$NfPVYw3ZXd;Bo#kBs0wu4A5N;}u!X%UP|pQp$*`)T}p(QW@{TAn>Dzyb5u*2fp=p zT5pl^JpAPE?|JGB?l?QPoqb!*zHMh{%NhE`Ik;zm-~4g_Pe$eW2Ly+!)%0rb1UlI# za6539twXe5U^n1W|1oyAzSeIx-Hg#bymA}RBiqOzU_%PDn3^q%W2|>ev!0h%^CIW36Z0xU1JB)QXqYjq*~SW$ zqO1sf8rlZlUw#2O&0LU{$P0B*b6n?QsUXQ&HK*B@D`hpmw1#JY1vPyl!p{G9k#<;S zrzR#7{58s0AP|Xlj3-tS=sm4eHJ0S*jo>Exy#7`28`B`!=0*a#ikfRu;bKe}9**f> z&PlmPa0lKF6>sX7rcbBoV7N%5DGWRQ^P)M@imEEbR2q+d4Moj*b|#USndV$1%U>{|@hfpSG!oiqC4F-_I1MFdaBYcIi2k`r#z_!2@ z@pXSs8-5_@BJdEb!|6zXJ%ss4qPI#!jo=2saRMx7;1A$&WWLK}>DhO6TL$+>qn6-) zj+reHI58A!r=N&sQ&;k`ihp8j@b1tfeBspabKU1mEd0^jrUar0E+ug A8vp