Как закончить работу программы корректно:
class Program
{
static void Main(string[] args)
{
List<double> mass = new List<double>()
{
1,
2,
3,
6,
7,
13,
21
};
Analysis analysis = new Analysis(mass);
if (analysis.task1.IsAlive == false && analysis.task2.IsAlive == false)
{
analysis.Show_Res();
}
Console.ReadKey();
}
}
public class Analysis
{
List<double> mass;
public Thread task1;
public Thread task2;
public Analysis(List<double> mass)
{
this.mass = mass;
task1 = new Thread(Fibonachi);
task2 = new Thread(Prime_Numbers);
task1.Start();
task2.Start();
}
public void Show_Res()
{
StreamReader read1 = new StreamReader("Fibonachi.txt");
string line = "";
Console.WriteLine("Найденны числа фибоначи");
while ((line = read1.ReadLine()) != null)
{
Console.WriteLine(line);
}
read1.Close();
StreamReader read2 = new StreamReader("Prime_Numbers.txt");
Console.WriteLine("Найдены простые числа");
while ((line = read2.ReadLine()) != null)
{
Console.WriteLine(line);
}
read2.Close();
}
public void Fibonachi()
{
StreamWriter str1 = new StreamWriter("Fibonachi.txt");
for (var i = 2; i < mass.Count; i++)
{
if (mass[i - 2] + mass[i - 1] == mass[i])
{
str1.WriteLine(mass[i]);
}
}
str1.Close();
task1.Abort();
}
public void Prime_Numbers()
{
StreamWriter str = new StreamWriter("Prime_Numbers.txt");
bool prost;
for (var i = 0; i < mass.Count; i++)
{
prost = true;
for (int j = 2; j <= mass[i] / 2; j++)
{
if (mass[i] % j == 0)
{
prost = false;
break;
}
}
if (prost)
{
str.WriteLine(mass[i]);
}
}
str.Close();
task2.Abort();
}
}
Как мне вызывать этот 3 метод Show_Res
, я уже как не пробовал, не понимаю, как мне с синхронизировать эту чертову колесницу, для меня пока многопоточность самая больная тема, подскажите пожалуйста. Если с объяснениями буду при много благодарен!(
Чтобы дождаться конца треда, надо вызвать myThread.Join();
, thread.Abort();
вызывать без причины не надо. Добавил минимум изменений в ваш код, но не проверял, не запускал. В идеале вообще для этого использовать таски, а не потоки.
class Program
{
static void Main(string[] args)
{
List<double> mass = new List<double>()
{
1,
2,
3,
6,
7,
13,
21
};
Analysis analysis = new Analysis(mass);
analysis.task1.Join();
analysis.task2.Join();
var task3 = new Thread(analysis.Show_Res);
task3.Start();
task3.Join();
Console.ReadKey();
}
}
public class Analysis
{
List<double> mass;
public Thread task1;
public Thread task2;
public Analysis(List<double> mass)
{
this.mass = mass;
task1 = new Thread(Fibonachi);
task2 = new Thread(Prime_Numbers);
task1.Start();
task2.Start();
}
public void Show_Res()
{
using (StreamReader read1 = new StreamReader("Fibonachi.txt"))
{
string line = "";
Console.WriteLine("Найденны числа фибоначи");
while ((line = read1.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
using (StreamReader read2 = new StreamReader("Prime_Numbers.txt"))
{
string line = "";
Console.WriteLine("Найдены простые числа");
while ((line = read2.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
public void Fibonachi()
{
using (StreamWriter str1 = new StreamWriter("Fibonachi.txt"))
{
for (var i = 2; i < mass.Count; i++)
{
if (mass[i - 2] + mass[i - 1] == mass[i])
{
str1.WriteLine(mass[i]);
}
}
}
}
public void Prime_Numbers()
{
using (StreamWriter str = new StreamWriter("Prime_Numbers.txt"))
{
bool prost;
for (var i = 0; i < mass.Count; i++)
{
prost = true;
for (int j = 2; j <= mass[i] / 2; j++)
{
if (mass[i] % j == 0)
{
prost = false;
break;
}
}
if (prost)
{
str.WriteLine(mass[i]);
}
}
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет, мне нужно сделать лог вставки в базу данных и сохранить этот лог в файлНаведите пожалуйста пример или документацию ибо я не нашел
Делаю корзину, много товаров, хотел прикрутить ajax на тык по кнопке, не могу понять как передать значение $cartItem->rowId для удаления выбранного...
Делаю вебсокеты на php с workermanЗапускается на сервере успешно, но прослушать не могу