private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; byte MaxI = 28; // число костяшек домино byte ThreadNum = Decimal.ToByte(InputThreadNum.Value); // число потоков if (Threads != null) { // завершим потоки foreach (Thread thr in Threads) thr.Abort(); } if (ThreadNum == 0) { DominoTable DTtemp = new DominoTable(Decimal.ToByte(inputK.Value), Decimal.ToByte(inputN.Value), 0, 0, SetInfo, SetText, chkShow.Checked ? 0 : 1000000000); DTtemp.Solve(); } else { Threads = new Thread[ThreadNum]; DTables = new DominoTable[ThreadNum]; // разные для разных потоков значения поиска byte Step = (byte)(MaxI / ThreadNum); // число домино на один поток в первой позиции таблицы (0,0) if (MaxI % ThreadNum > 0) Step++; byte StartI = 0; // начальная костяшка домино для потока в первой позиции таблицы (0,0) byte EndI = Step; // конечная костяшка домино для потока в первой позиции таблицы (0,0) for (byte tmp = 0; tmp < ThreadNum; tmp++) { DTables[tmp] = new DominoTable(Decimal.ToByte(inputK.Value), Decimal.ToByte(inputN.Value), StartI, EndI, SetInfo, SetText, chkShow.Checked ? 0 : 1000000000); Threads[tmp] = new Thread(DTables[tmp].Solve); Threads[tmp].Start(); //SetText("Thread #" + tmp.ToString() + ", start " + StartI.ToString() + ", end " + EndI.ToString() + Environment.NewLine); // значения для следующего потока StartI = (byte)(EndI + 1); EndI += Step; if (EndI >= MaxI) EndI = (byte)(MaxI - 1); // работаем с номерами костяшек от 0 до MaxI-1 } } }
private void button1_Click(object sender, EventArgs e) { DominoTable Table = new DominoTable(Decimal.ToByte(inputK.Value), Decimal.ToByte(inputN.Value), 0, 0, SetInfo, SetText, chkShow.Checked ? 0 : 1000000000); textBox1.Text = Table.GetAllDominoText(); }