2017-01-14 1 views
-4

필자는 CORE I7이 6 스레드로 프로그램을 작성했지만 잘 실행되지만 CELERON을 실행하면 작동하지 않습니다. 스레드가 작동을 멈추는 것 같습니다.성능 향상을 위해 VB.NET 2013에서 프로그램을 어떻게 향상시킬 수 있습니까?

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
    Timer1.Enabled = True 
    CheckForIllegalCrossThreadCalls = False 

    trd = New Thread(AddressOf ThreadTask) 
    barreras_trd = New Thread(AddressOf barreras) 
    sensores_trd = New Thread(AddressOf sensores) 
    convierte_trd = New Thread(AddressOf convierte) 
    emite_tiquet_trd = New Thread(AddressOf tiquet) 
    actualiza_trd = New Thread(AddressOf actualiza_grilla) 

    trd.IsBackground = True 
    barreras_trd.IsBackground = True 
    sensores_trd.IsBackground = True 
    convierte_trd.IsBackground = True 
    emite_tiquet_trd.IsBackground = True 
    actualiza_trd.IsBackground = True 

    trd.Start() 
    barreras_trd.Start() 
    sensores_trd.Start() 
    convierte_trd.Start() 
    emite_tiquet_trd.Start() 
    actualiza_trd.Start() 

    Me.DataGridView1.FirstDisplayedScrollingRowIndex = Me.DataGridView1.RowCount - 1 

    'Select the last row. 
    Me.DataGridView1.Rows(Me.DataGridView1.RowCount - 1).Selected = True 
End Sub 
+4

'CheckF orIllegalCrossThreadCalls = False'는 매우 나쁜 습관입니다. vb.net에서 스레드를 사용하는 방법과 다른 스레드에서 GUI를 업데이트하는 방법에 대한 연구를하십시오. 여기에서 시작할 수 있습니다. https://msdn.microsoft.com/en-us/library/aa289496(v=vs.71).aspx – jonathana

+0

각 위협에 대해 별도의 스레드를 사용하지 마십시오. 위협에 대해 하나의 스레드를 사용하고 각각의 스레드를 반복하고 어떻게 든 업데이트하십시오. 우리가 얻을 수있는만큼 도움이되는 코드를 보지 않아도됩니다! –

+0

게시 한 코드 부분에는 동기화 교착 상태 문제가있을 수 있지만 문제는 아닙니다. 이런 식으로 답할 수는 없습니다. –

답변

0

우리는 당신의 스레드 방법이 무엇 아무 생각했습니다 없기 때문에, 우리가 많이 제공 할 수는 없지만 적어도 이들 중 하나를 단순화 할 수 있습니다 :

옵션 1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
    Timer1.Enabled = True 

    ' Runs all in parallel (give or take the scheduler and duration) 
    Task.Run(Sub() ThreadTask()) 
    Task.Run(Sub() barreras()) 
    Task.Run(Sub() sensores()) 
    Task.Run(Sub() convierte()) 
    Task.Run(Sub() tiquet()) 
    Task.Run(Sub() actualiza_grilla()) 

    Me.DataGridView1.FirstDisplayedScrollingRowIndex = Me.DataGridView1.RowCount - 1 

    'Select the last row. 
    Me.DataGridView1.Rows(Me.DataGridView1.RowCount - 1).Selected = True 
End Sub 

옵션 2

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
    Timer1.Enabled = True 

    Task.Run(Sub() AllThreads()) 

    Me.DataGridView1.FirstDisplayedScrollingRowIndex = Me.DataGridView1.RowCount - 1 

    'Select the last row. 
    Me.DataGridView1.Rows(Me.DataGridView1.RowCount - 1).Selected = True 
End Sub 

Sub AllThreads() 
    ' Runs each in series 
    ThreadTask() 
    barreras() 
    sensores() 
    convierte() 
    tiquet() 
    actualiza_grilla() 
End Sub 
+0

답변 해 주셔서 감사합니다. 그것은 내가 가야만하는 곳에서 나를 인도한다. 해결책은 TPL입니다. (작업 병렬 라이브러리) – ElCalefactordeManchuri

관련 문제