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

mmo1986

Junior
Joined
Oct 5, 2015
Messages
229
Reactions
33
MR
0.000
Skype
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
 
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ỉ.
 
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ử
 
cái lock này mình test thấy nó chạy theo thứ tự chứ không phải song song bạn ơi
Mình tưởng ý bác là Thread 1 tăng thằng count, Thread 2 cũng tăng thằng count.
Còn nhu cầu multhread thì trong forum có code của mấy bác kia share rồi đó :D
 
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);
}
 
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:
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
417,480
Messages
7,059,262
Members
169,807
Latest member
vivianrichardson

Most viewed of week

Most viewed of week

Back
Top Bottom