watt Posted November 2, 2006 at 01:20 AM Report #61579 Posted November 2, 2006 at 01:20 AM Boa noite! No meu jogo estou comoutro problema, agora qd estou a correr jogos em simultanio, há th reads q deixam de rtabalhar sem xegar ao tempo total de jogo. tenho as estas variaveis e mais umas ... Public timef(1000), timen(1000) As Date 'Variaveis gerais Public njogos As Integer = 0 Public iplista, nomlista As New ArrayList Public threadjogos(1000) As System.Threading.Thread Public emjogo(1000, 5),tempjog(1000) As String ------ verifico se há jogo e façoumnovo thread -------------------------------- Dim data As Date = Date.Now Dim x As Integer tempinicio = Date.Now.TimeOfDay.Hours.ToString & ":" & Format(Int(Date.Now.TimeOfDay.Minutes.ToString), "00") sql1 = "select * from jogos where data='" & data.Date & "' and hora='" & tempinicio & "' and estado <> 'S'" ligacao.ligacao1.Close() ligacao.ligacao1.Open() ligacao.cmdsql1 = New MySql.Data.MySqlClient.MySqlCommand(sql1, ligacao.ligacao1) ligacao.var1 = cmdsql1.ExecuteReader While ligacao.var1.Read njogos = njogos + 1 emjogo(njogos, 1) = var1("equipa1") emjogo(njogos, 2) = var1("equipa2") emjogo(njogos, 3) = var1("id") sql = "UPDATE jogos Set estado='S' where id ='" & emjogo(njogos, 3) & "'" ligacao.ligacao.Close() ligacao.ligacao.Open() ligacao.cmdsql = New MySql.Data.MySqlClient.MySqlCommand(sql, ligacao.ligacao) cmdsql.ExecuteNonQuery() ligacao.ligacao.Close() threadjogos(njogos) = New Thread(AddressOf osjogos) threadjogos(njogos).Start() threadjogos(njogos).Sleep(50) End While ligacao.ligacao1.Close() sub osjogos() Dim meunumero As Integer = njogos Depois de carregar nomes e caracteristicas dos jogadores, então começa o jogo 'iniciar o jogo ------------------------------------------------------------------ While Not timef(meunumero) = timen(meunumero) timen(meunumero) = Date.Now minutos = ((90 + descontos) - 1) - DateDiff(DateInterval.Minute, timen(meunumero), timef(meunumero)) segundos = 59 - (DateDiff(DateInterval.Second, timen(meunumero), timef(meunumero)) Mod 60) tempjog(meunumero) = Format(minutos, "00") & ":" & Format(segundos, "00") Dim loc As Integer Randomize() asorte = (Rnd() * aleatorios) 'equipa1 If asorte >= 0 And asorte <= skillequipa(meunumero, 1) Then loc = 1 qataca = "1" Randomize() y = Int(Rnd() * 1200) If y >= 0 And y <= 150 Then Tdefesa(1, meunumero) End If If y >= 150 And y <= 1000 Then Tmcampo(1, meunumero) End If If y >= 1000 And y <= 1200 Then Tataque(1, meunumero) End If 'equipa2 ElseIf asorte >= (aleatorios - skillequipa(meunumero, 2)) And asorte <= aleatorios Then loc = 3 qataca = "2" Randomize() y = Int(Rnd() * 1200) If y >= 0 And y <= 150 Then Tdefesa(2, meunumero) End If If y >= 150 And y <= 1000 Then Tmcampo(2, meunumero) End If If y >= 1000 And y <= 1200 Then Tataque(2, meunumero) End If Else loc = 2 End If '-------------> Velocidade do jogo <----------- threadjogos(meunumero).Sleep(1000) 'Fim de jogo If timef(meunumero) <= timen(meunumero) Then sql = "UPDATE jogos Set tempoJog='" & tempjog(meunumero) & "', estado='F' where id ='" & emjogo(meunumero, 3) & "'" ligacao.ligacao.Close() ligacao.ligacao.Open() ligacao.cmdsql = New MySql.Data.MySqlClient.MySqlCommand(sql, ligacao.ligacao) cmdsql.ExecuteNonQuery() ligacao.ligacao.Close() threadjogos(meunumero).Abort() End If End While end sub depois os jogos ficam por acabar, aguns duran apenas segundos e poucos mais... mas se meter um só jogo fui até ao fim. alguem me pode ajudar ??? agradecia mt
Delta Posted November 2, 2006 at 08:49 AM Report #61595 Posted November 2, 2006 at 08:49 AM que estrutura mais perigosa e esquesita que tens aqui : por cada interacção no ciclo tu abres e fechas, voltas a abrir e voltas a fechar e crias uma thread nova 1000 threads que tens definidas na estrutura de threads nas variáveis globais não admira que não funcione While ligacao.var1.Read njogos = njogos + 1 emjogo(njogos, 1) = var1("equipa1") emjogo(njogos, 2) = var1("equipa2") emjogo(njogos, 3) = var1("id") sql = "UPDATE jogos Set estado='S' where id ='" & emjogo(njogos, 3) & "'" ligacao.ligacao.Close() ligacao.ligacao.Open() ligacao.cmdsql = New MySql.Data.MySqlClient.MySqlCommand(sql, ligacao.ligacao) cmdsql.ExecuteNonQuery() ligacao.ligacao.Close() threadjogos(njogos) = New Thread(AddressOf osjogos) threadjogos(njogos).Start() threadjogos(njogos).Sleep(50) End While
watt Posted November 2, 2006 at 11:30 AM Author Report #61603 Posted November 2, 2006 at 11:30 AM While ligacao.var1.Read njogos = njogos + 1 emjogo(njogos, 1) = var1("equipa1") emjogo(njogos, 2) = var1("equipa2") emjogo(njogos, 3) = var1("id") sql = "UPDATE jogos Set estado='S' where id ='" & emjogo(njogos, 3) & "'" ligacao.ligacao.Close() ligacao.ligacao.Open() ligacao.cmdsql = New MySql.Data.MySqlClient.MySqlCommand(sql, ligacao.ligacao) cmdsql.ExecuteNonQuery() ligacao.ligacao.Close() threadjogos(njogos) = New Thread(AddressOf osjogos) threadjogos(njogos).Start() threadjogos(njogos).Sleep(50) End While eu queria criar uma nova thread e e adormecela por 50 milesimos de segundo. mas não apagar. só faço o abort aos 90 e tal minutos. mas já agora que tipo de codigo sugeres?? EDIT: Da próxima, usem a ferramenta GeSHi para postarem o código!! (Ass. bk@ero)
Delta Posted November 2, 2006 at 02:35 PM Report #61629 Posted November 2, 2006 at 02:35 PM Eu não percebo a lógica do teu jogo, que jogo afinal pretendes fazer O que sei é que lançar Threads por cada interacção de ciclo é um disparate, criar uma estrutura de 1000 Threads !?
watt Posted November 2, 2006 at 02:43 PM Author Report #61633 Posted November 2, 2006 at 02:43 PM hummm... a minha ideia era só ir iniciando um thread por jogo. mas nao sei qd e qts jogos vao começar. Como é q meto o seguinte código a correr em simultâneo ??? como se fossem vários threads ao mesmo tempo sub osjogos() Dim meunumero As Integer = njogos Depois de carregar nomes e caracteristicas dos jogadores, então começa o jogo 'iniciar o jogo ------------------------------------------------------------------ While Not timef(meunumero) = timen(meunumero) timen(meunumero) = Date.Now minutos = ((90 + descontos) - 1) - DateDiff(DateInterval.Minute, timen(meunumero), timef(meunumero)) segundos = 59 - (DateDiff(DateInterval.Second, timen(meunumero), timef(meunumero)) Mod 60) tempjog(meunumero) = Format(minutos, "00") & ":" & Format(segundos, "00") Dim loc As Integer Randomize() asorte = (Rnd() * aleatorios) 'equipa1 If asorte >= 0 And asorte <= skillequipa(meunumero, 1) Then loc = 1 qataca = "1" Randomize() y = Int(Rnd() * 1200) If y >= 0 And y <= 150 Then Tdefesa(1, meunumero) End If If y >= 150 And y <= 1000 Then Tmcampo(1, meunumero) End If If y >= 1000 And y <= 1200 Then Tataque(1, meunumero) End If 'equipa2 ElseIf asorte >= (aleatorios - skillequipa(meunumero, 2)) And asorte <= aleatorios Then loc = 3 qataca = "2" Randomize() y = Int(Rnd() * 1200) If y >= 0 And y <= 150 Then Tdefesa(2, meunumero) End If If y >= 150 And y <= 1000 Then Tmcampo(2, meunumero) End If If y >= 1000 And y <= 1200 Then Tataque(2, meunumero) End If Else loc = 2 End If '-------------> Velocidade do jogo <----------- threadjogos(meunumero).Sleep(1000) 'Fim de jogo If timef(meunumero) <= timen(meunumero) Then sql = "UPDATE jogos Set tempoJog='" & tempjog(meunumero) & "', estado='F' where id ='" & emjogo(meunumero, 3) & "'" ligacao.ligacao.Close() ligacao.ligacao.Open() ligacao.cmdsql = New MySql.Data.MySqlClient.MySqlCommand(sql, ligacao.ligacao) cmdsql.ExecuteNonQuery() ligacao.ligacao.Close() threadjogos(meunumero).Abort() End If End While
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now