منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : كيفية تشغيل اكتر من Thread فى نفس الوقت ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

كيف تتحكم بعدد الثريدات مثلا 100 بنفس الثانية

يعنى انا احدد عدد العمليات مثلا 5 او 10 ويبدء العلميات كلها فى نفس الوقت
يعنى مثلا لو اخترت 5 يبقا يشتغل ال5 عمليات فى نفس الثانية وهكذا

للتوضيح اكتر

مثلا هذا الكود
كود :
mg = New Thread(AddressOf test) With {.IsBackground = True}
        mg.Start()

Sub test
list.add("new item to test")
end sub

لو مثلا عايز 3 عمليات يبقا المفروض اعمل كدا

كود :
mg1 = New Thread(AddressOf test) With {.IsBackground = True}
        mg1.Start()


mg2 = New Thread(AddressOf test) With {.IsBackground = True}
        mg2.Start()


mg3 = New Thread(AddressOf test) With {.IsBackground = True}
        mg3.Start()
طريقة مرهقة جدا ومتنفعش فى بعض الاوقات

مثلا لو عندى حلقة دوران فيها مثلا 100 الف

اكيد ف طريقة اسهل وافضل من كل ذلك

بتحديد عدد العمليات اتمنى المساعدة والتوضيح لطلبي هذا

مشكورين مقدما

حاول تستخدم Task Class فيه روتين اسمه Task.Run
(27-04-17, 11:42 AM)silverlight كتب : [ -> ]حاول تستخدم Task Class فيه روتين اسمه  Task.Run

يعنى مينفعش تحكم بعدد الثريدات ؟
ضعهم في مصفوفة
(27-04-17, 11:52 AM)silverlight كتب : [ -> ]ضعهم في مصفوفة

طيب ممكن كود بسيط كمثال
يا أخ مسعد

فيه شئ اسمه Action Deleagate وكل ما في الأمر انك محتاج تبني مصفوفة List of Action و تمرر لها الروتينات
ثم تقوم بعمل loop علي المصفوفة  و تنفذ كل روتين

و الأفضل لك تستخدم Task class فيه مميزات أفضل لتنفيذ ما تريده
و النت ملئ ب الامثلة
(27-04-17, 12:11 PM)silverlight كتب : [ -> ]يا أخ مسعد

فيه شئ اسمه Action Deleagate وكل ما في الأمر انك محتاج تبني مصفوفة List of Action و تمرر لها الروتينات
ثم تقوم بعمل loop علي المصفوفة  و تنفذ كل روتين

و الأفضل لك تستخدم Task class فيه مميزات أفضل لتنفيذ ما تريده
و النت ملئ ب الامثلة

اسف جدا لازعاجك

ولكن للاسف انا خبرتى قليلة

ولم اتعامل مع هذه الامور من قبل

ولكى افهم هحتاج مثال على كودى هذا عشان اقدر افهم

mg = New Thread(AddressOf test) With {.IsBackground = True}
mg.Start()

Sub test
list.add("new item to test")
end sub

لذا ساحاول البحث اكتر

وايضا انتظر مساعدة بعض الاعضاء
PHP كود :
Private Sub Form1_Load(sender As ObjectAs EventArgsHandles MyBase.Load

        For Each f 
As Func(Of StringIn GetNames()
 
           MessageBox.Show(f())
 
       Next

        For Each a 
As Action In GetActions()
 
           a()
 
       Next
    End Sub

    Private Iterator 
Function GetNames() As IEnumerable(Of Func(Of String))

 
       Yield Function() "magic"
 
       Yield Function() "mostafa"
 
       Yield Function() "Adel"
 
       Yield AddressOf GetName

        Return
    End 
Function

 
   Private Function GetName() As String
        Return 
"any name"
 
   End Function

 
   Private Iterator Function GetActions() As IEnumerable(Of Action)
 
       Yield Sub()
 
                 MessageBox.Show("عمر")
 
             End Sub
        Yield Sub
()
 
                 MessageBox.Show("فريد")
 
             End Sub

        Yield Sub
()
 
                 MessageBox.Show("فاروق")
 
             End Sub

        Yield AddressOf create

        Return

    End 
Function

 
   Private Sub create()
 
       MessageBox.Show("انتهي")
 
   End Sub 

أو

PHP كود :
Public Class Form1

    Private names 
As New List(Of String)()

 
   Private Sub Form1_Load(sender As ObjectAs EventArgsHandles MyBase.Load

        Dim threads 
As List(Of Threading.Thread) = New List(Of Threading.Thread)()
 
       threads.Add(New Threading.Thread(AddressOf doActionWith {.IsBackground True})
 
       threads.Add(New Threading.Thread(AddressOf doActionWith {.IsBackground True})
 
       threads.Add(New Threading.Thread(AddressOf doActionWith {.IsBackground True})
 
       threads.Add(New Threading.Thread(AddressOf doActionWith {.IsBackground True})
 
       threads.Add(New Threading.Thread(AddressOf doActionWith {.IsBackground True})

 
       threads.Add(New Threading.Thread(Sub()
 
                                            names.Add("Test")
 
                                        End SubWith {.IsBackground True})

 
       threads.Add(New Threading.Thread(Sub()
 
                                            names.Add("Test")
 
                                        End SubWith {.IsBackground True})

 
       threads.ForEach(AddressOf StartThread)

 
   End Sub

    Private Sub StartThread
(As Threading.Thread)
 
       t.Start()
 
   End Sub

    Private Sub doAction
()
 
       names.Add("Test")
 
   End Sub

    Private Sub Add
(As String)
 
       ListBox1.Items.Add(s)
 
   End Sub

    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        
' إظهار النتائج
        names.ForEach(AddressOf Add)
    End Sub

End Class 
بارك الله فيك

طيب ايه رايك في
Parallel.For(0, ips_count - 1, New ParallelOptions With {.MaxDegreeOfParallelism = 61},
Sub(i)
متهيألي الموضوع بقي واضح و سهل
الصفحات : 1 2