Ejemplo n.º 1
0
        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
                }
            }
        }
Ejemplo n.º 2
0
 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();
 }