Jump to content

[VB.NET 2005] Pq é q os thread deixam de trabalhar


watt
 Share

Recommended Posts

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

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

 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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.