Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com Thread.


Moonfall

Pergunta

Seguinte galera.. estou com 1 grande problema..

estou fazendo 1 conversor de WAV para MP3.

porem não quero que ele seja lento pois isso sera para + de 1000 wavs/dia

então resolvi criar 5 threads para resolver esse problema de "velocidade"

vou mostrar exemplo de 2 pois 5 o tópico iria ficar muito grande >>

trd1 = New Thread(AddressOf conversao1)
 trd2 = New Thread(AddressOf conversao2)
 trd1.Start()
 trd2.Start()
'--------------------------------------------------
 Public Sub conversao1()
        Dim arqwav1, arqmp31 As String
        Dim a As Integer
        For a = 0 To List1.Items.Count / 5
            arqwav1 = lista1(a)
            arqmp31 = Dir1.Path & "\" & strFileNames(a + 1) & ".mp3"
            If Convert1(arqwav1, arqmp31) = True Then
                'L_1.Text = a + 1 & "/" & List1.Items.Count / 5 & " Concluidos"
                'L_1.Refresh()
            End If
        Next a
    End Sub
'----------------------------------------------------------------
Private Function Convert1(ByVal arqwave As String, ByVal arqmp3 As String) As Boolean
        On Error GoTo err_convert
        Dim BufferSize As Integer
        Dim Wav() As Short
        Dim CurrentSamples As Integer
        FileR.OpenFile(arqwave)
        If FileR.LastErrorNum < 0 Then GoTo P
        FileW.CreateFile(arqmp3)
        If FileW.LastErrorNum < 0 Then GoTo P
        FileW.SetFormatArray(FileR.ArrayFrequency, FileR.ArrayChannels)
        BufferSize = FileR.ArrayChannels * FileR.ArrayFrequency
        CurrentSamples = 0
        Do While True
            Wav = FileR.ReadFile(BufferSize)
            If UBound(Wav) + 1 = 0 Then
                Exit Do
            End If
            FileW.WriteFile(Wav)
            CurrentSamples = CurrentSamples + (UBound(Wav) + 1) / FileR.nChannels
            If CurrentSamples > FileR.nSamples Then
                CurrentSamples = FileR.nSamples
            End If
            System.Windows.Forms.Application.DoEvents()
        Loop
        FileW.CloseFile()
        FileR.CloseFile()
        Convert1 = True
        Exit Function
P:
        FileR.CloseFile()
        FileW.CloseFile()
        Me.Cursor = System.Windows.Forms.Cursors.Default
        Convert1 = False
        Exit Function
err_convert:
        MsgBox("Convert1 :" & Err.Description)
        MsgBox("Aconteceram erros na conversão entre em contato com o suporte", MsgBoxStyle.Critical, "Contate o suporte")
        Convert1 = False
        End
    End Function

-------------------------------------------------------------------------------------------------------------------------------------------------------------

ou seja tem 1 thread q tem 1 conversao q tem 1 funcao convert por ex:

Thread1 -> conversao1 -> convert1

Thread2 -> conversao2 -> convert2

porem se tento executar as 2 de uma vez acontece o seguinte erro:

Convert1: O servidor emitiu uma exceção. (exception from HRRESULT: 0x80010105 (RPC_E_SERVERFAULT))

já testei as 2 threads sozinhas e funcionam, so quando coloco as duas para rodar ao mesmo tempo que da esse problema.. alguém tem alguma ideia?

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...