السلام عليكم
كيف تتحكم بعدد الثريدات مثلا 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 Object, e As EventArgs) Handles MyBase.Load
For Each f As Func(Of String) In 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 Object, e As EventArgs) Handles MyBase.Load
Dim threads As List(Of Threading.Thread) = New List(Of Threading.Thread)()
threads.Add(New Threading.Thread(AddressOf doAction) With {.IsBackground = True})
threads.Add(New Threading.Thread(AddressOf doAction) With {.IsBackground = True})
threads.Add(New Threading.Thread(AddressOf doAction) With {.IsBackground = True})
threads.Add(New Threading.Thread(AddressOf doAction) With {.IsBackground = True})
threads.Add(New Threading.Thread(AddressOf doAction) With {.IsBackground = True})
threads.Add(New Threading.Thread(Sub()
names.Add("Test")
End Sub) With {.IsBackground = True})
threads.Add(New Threading.Thread(Sub()
names.Add("Test")
End Sub) With {.IsBackground = True})
threads.ForEach(AddressOf StartThread)
End Sub
Private Sub StartThread(t As Threading.Thread)
t.Start()
End Sub
Private Sub doAction()
names.Add("Test")
End Sub
Private Sub Add(s As String)
ListBox1.Items.Add(s)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' إظهار النتائج
names.ForEach(AddressOf Add)
End Sub
End Class
بارك الله فيك
طيب ايه رايك في
Parallel.For(0, ips_count - 1, New ParallelOptions With {.MaxDegreeOfParallelism = 61},
Sub(i)
متهيألي الموضوع بقي واضح و سهل