watt Posted November 2, 2006 at 01:20 AM Report Share #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 Link to comment Share on other sites More sharing options...
Delta Posted November 2, 2006 at 08:49 AM Report Share #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 Link to comment Share on other sites More sharing options...
watt Posted November 2, 2006 at 11:30 AM Author Report Share #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) Link to comment Share on other sites More sharing options...
Delta Posted November 2, 2006 at 02:35 PM Report Share #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 !? Link to comment Share on other sites More sharing options...
watt Posted November 2, 2006 at 02:43 PM Author Report Share #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 Link to comment Share on other sites More sharing options...
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