Cần pro giúp đở về multi thread c# xin hậu tạ

mmo1986

Junior
Joined
Oct 5, 2015
Messages
227
Reactions
33
MR
0.000
Chat with me via Skype
Chào các các, tình hình là e có làm cái tool quản lí profile chrome.
Hiện thì tool đang chạy đơn luồng và mỗi lần hoạt động thì nó chạy từ trên xuống dưới lần lượt theo thứ tự profile như hình ạ

SvkchRd.png


giờ e muốn làm cho nó chạy đa luồng ví dụ mỗi lần chạy 5 luồng thì nó sẽ mở 5 profile cùng lúc theo thứ tự từ trên xuống dưới.
Ví dụ chạy profile 1,2,3,4,5 , khi chạy xong 5 profile này thì chạy tiếp 6,7,8,9,10.
E có đoạn code sau để thực thi code trong thread

Thread t1 = new Thread((ThreadStart) =>
{
for (int loop = Convert.ToInt32(numericUpDown10.Value) - 1; loop < Convert.ToInt32(numericUpDown11.Value); loop++)
{
// Hiện tại thì code sẽ chạy bên trong vòng lặp này
}
});
t1.IsBackground = true;
t1.Start();

Hiện tại biến loop khi chạy xong code bên trong mới trả về giá trị của biến nên e không biết làm cách nào để tạo các thread khác để chạy và đồng bộ với biến loop đó

ví dụ như này cho ae dể hiểu ạ

Ta có hai thằng A và B thi nhau đếm
Nếu A đếm 1 rồi thì B đếm 2
Hai thằng này thực thi song song ạ

Pro nào giúp được e xin hậu tạ ạ e cảm ơn
 
Joined
Jul 9, 2014
Messages
1,109
Solutions
2
Reactions
530
MR
4.849
Chat with me via Yahoo Messenger Chat with me via Skype
Chào các các, tình hình là e có làm cái tool quản lí profile chrome.
Hiện thì tool đang chạy đơn luồng và mỗi lần hoạt động thì nó chạy từ trên xuống dưới lần lượt theo thứ tự profile như hình ạ

SvkchRd.png


giờ e muốn làm cho nó chạy đa luồng ví dụ mỗi lần chạy 5 luồng thì nó sẽ mở 5 profile cùng lúc theo thứ tự từ trên xuống dưới.
Ví dụ chạy profile 1,2,3,4,5 , khi chạy xong 5 profile này thì chạy tiếp 6,7,8,9,10.
E có đoạn code sau để thực thi code trong thread

Thread t1 = new Thread((ThreadStart) =>
{
for (int loop = Convert.ToInt32(numericUpDown10.Value) - 1; loop < Convert.ToInt32(numericUpDown11.Value); loop++)
{
// Hiện tại thì code sẽ chạy bên trong vòng lặp này
}
});
t1.IsBackground = true;
t1.Start();

Hiện tại biến loop khi chạy xong code bên trong mới trả về giá trị của biến nên e không biết làm cách nào để tạo các thread khác để chạy và đồng bộ với biến loop đó

ví dụ như này cho ae dể hiểu ạ

Ta có hai thằng A và B thi nhau đếm
Nếu A đếm 1 rồi thì B đếm 2
Hai thằng này thực thi song song ạ

Pro nào giúp được e xin hậu tạ ạ e cảm ơn
bác thử tạo 1 biến cục bộ, mỗi thread tạo xong sẽ ++ cái biến đó lên, như vậy sẽ ko trùng nhỉ.
 

themen99

Legendary
Verified
Joined
Mar 17, 2012
Messages
3,331
Reactions
2,892
MR
1.321
$75.00
Chat with me via Yahoo Messenger Chat with me via Skype
không biết đúng ý bác không nhé. Run 5 thread.
Mỗi theard sẽ chạy profile
n=1, n=n+5 => nó sẽ lấy profile 1,6,11,.....
n=2, n=n+5 =>nó sẽ lấy profile 2,7,12,.....
n=3, n=n+5 =>nó sẽ lấy profile 3,8,13,....
n=4, n=n+5 =>nó sẽ lấy profile 4,9,14,.....
n=5, n=n+5 =>nó sẽ lấy profile 5,10,15,...
 
không biết đúng ý bác không nhé. Run 5 thread.
Mỗi theard sẽ chạy profile
n=1, n=n+5 => nó sẽ lấy profile 1,6,11,.....
n=2, n=n+5 =>nó sẽ lấy profile 2,7,12,.....
n=3, n=n+5 =>nó sẽ lấy profile 3,8,13,....
n=4, n=n+5 =>nó sẽ lấy profile 4,9,14,.....
n=5, n=n+5 =>nó sẽ lấy profile 5,10,15,...
cảm ơn pro, ý tưởng của pro củng khá hay để e test thử
 

hoangphan6289

Junior
Joined
Jul 15, 2019
Messages
38
Reactions
17
MR
0.029
Thấy bạn làm sai hướng rồi.
Tớ thường làm thế này.
Tạo 1 biến THREAD_COUNT ở ngoài để đếm số thread rồi làm việc.
Ví dụ nhé : Có 1 button gọi là button1. Khi click vào sẽ ra hàm

private int THREAD_COUNT = 0;
private void button1_Click(object sender, EventArgs e)
{
// Ở đây gọi 1 thread mới để ko ảnh hưởng tới GUI
new Thread(() =>
{
Thread.CurrenThread.IsBackGround = true;
Working();
}).Start();
}

// Sau đó tạo 1 hàm Working() để chạy công việc.

private void Working()
{
string[] ARRAY // giả sử đây là mảng ARRAY cần chạy lần lượt, có 100 profile CHROME chẳng hạn.
int MAX_THREAD = 5
for(int i = 0; i < ARRAY.length; i++)
{
while(THREAD_COUNT >= MAX_THREAD)
{
Thread.Sleep(500);
}
Interlocked.Increament(ref THREAD_COUNT);
new Thread(() =>
{
Thread.CurrenThread.IsBackGround = true;
WorkingOnSingleThread(ARRAY);
}
}
}


/// Cuối cùng mới là tạo 1 hàm WorkingOnSingleThread để chạy từng thread đơn lẽ

private void WorkingOnSingleThread(string LINE_DATA)
{
/// mọi công việc như bật chrome, load load gì đó, thực hiện ở đây
/// Sau khi chạy xong, phải giảm biến THREAD_COUNT đi 1 giá trị.
Interlocked.Decrement(ref THREAD_COUNT);
}
 

leminhtien

Hero
Kindness
Verified
Joined
Dec 18, 2013
Messages
839
Reactions
746
MR
1.102
demo cho bạn không biết giúp được gì không.
while (true)
{
while (threadlive >= 5) Thread.Sleep(1000);
new Thread(() => RunProfile(tên profile)) { IsBackground = true }.Start();
lock (objthreadlive) threadlive++;
}
 
Last edited:

loihen1987

Hero
Joined
Oct 23, 2014
Messages
1,075
Reactions
1,057
MR
1.170
Follow me on Facebook Chat with me via Skype
demo cho bạn không biết giúp được gì không.
while (true)
{
while (threadlive >= 5) Thread.Sleep(1000);
new Thread(() => RunProfile(tên profile)) { IsBackground = true }.Start();
lock (objthreadlive) threadlive++;
}
wifi phổ cập lên đỉnh núi rồi hả đại ka:p
 

Announcements

Today's birthdays

Forum statistics

Threads
424,893
Messages
7,152,342
Members
177,468
Latest member
hoanghamdo

Most discussed of week

Most discussed of week

Back
Top Bottom