Каким образом можно выполнять несколько задач одновременно? Например: выполняется цикл и одновременно выполняется еще один цикл.
Отслеживать
13.6k 12 12 золотых знаков 43 43 серебряных знака 72 72 бронзовых знака
задан 24 мар 2019 в 10:58
11 1 1 серебряный знак 5 5 бронзовых знаков
Способов реализации много. Почитайте теорию о много-поточном программировании, и документацию к классам Thread и Task . В документации к этим классам есть достаточное количество рабочих примеров, которых с избытком хватит для начала.
24 мар 2019 в 11:09
Стартовая точка: Parallel Programming in .NET. Конкретно по вашему вопросу: Parallel.Invoke
31 мар 2019 в 12:46
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Clordrin. Один из основных способов реализации одновременного выполнения нескольких задач — использование многопоточности. Для начала:
1. Подключить namespace Threading.
using System.Threading;
2. Создать два потока и в скобочках указать имя метода, который должен выполняться в потоке.
Песочница sandboxie или как запустить две программы одновременно
Thread thread1 = new Thread(Function1); // Создаём поток 1 Thread thread2 = new Thread(Function2); // Создаём поток 2
3. Создаём два метода и в них указываем цикл. В теле цикла выводим имя потока и переменную для примера и указываем задержку патока
static void Function1() < for (int i = 0; i < 10; i++) // Метод, который будет работать в потоке 1 < Console.WriteLine(«Поток 1 вывел — » + i); Thread.Sleep(1000); // Задержка на 1000мс >> static void Function2() < for (int i = 0; i < 10; i++) // Метод, который будет работать в потоке 2 < Console.WriteLine(«Поток 2 вывел — » + i); Thread.Sleep(1000); // Задержка на 1000мс >>
4. Запускаем потоки
thread1.Start(); // Запуск потока 1 thread2.Start(); // Запуск потока 2
Весь код программы:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace MultiThreadingQuestion < class Program < static void Main(string[] args) < Thread thread1 = new Thread(Function1); // Создаём поток 1 thread1.Start(); // Запуск потока 1 Thread thread2 = new Thread(Function2); // Создаём поток 2 thread2.Start(); // Запуск потока 2 Console.ReadKey(); >static void Function1() < for (int i = 0; i < 10; i++) // Метод, который будет работать в потоке 1 < Console.WriteLine(«Поток 1 вывел — » + i); Thread.Sleep(1000); // Задержка на 1000мс >> static void Function2() < for (int i = 0; i < 10; i++) // Метод, который будет работать в потоке 2 < Console.WriteLine(«Поток 2 вывел — » + i); Thread.Sleep(1000); // Задержка на 1000мс >> > >
Результат выполнения программы:
Надеюсь этот ответ был вам полезен.
Источник: ru.stackoverflow.com
Как одновременно запускать несколько программ с помощью Sandboxie
Запуск двух программ одновременно
У меня есть две программы на C ++, встроенные в Ubuntu, и я хочу запускать их одновременно. Я не хочу объединять их в один проект C ++ и запускать каждый в отдельном потоке, так как это вызывает у меня всевозможные проблемы.
По сути, я хочу эмулировать решение, когда я открываю две вкладки в терминале и запускаю каждую программу на отдельной вкладке. Тем не менее, я также хочу, чтобы одна программа (назовем эту Программу A) могла выйти и перезапустить другую программу (Программа B). Это не может быть достигнуто только в терминале.
Так что я хочу написать код C ++ в Программе A, который может запускать и завершать Программу B в любой момент. Обе программы должны работать одновременно, так что программе А не нужно ждать, пока программа В вернется, прежде чем продолжить работу с программой А.
Есть идеи? Спасибо!
Решение
В Linux вы можете fork текущий процесс, который создает новый процесс.
Затем вы должны запустить новый процесс с некоторыми exec системный вызов.
#include /* for fork */ #include /* for pid_t */ #include /* for wait */ int main(int argc,char** argv) < pid_t pid=fork(); if (pid==0) < execv(«/bin/echo»,argv); >>
Другие решения
У вас есть несколько вариантов здесь:
- Традиционный POSIX вилка / Exec (Есть буквально тонны примеров того, как сделать это в SO, например, этот один).
- Если вы можете использовать Boost, то Ускорить процесс это вариант.
- Если вы можете использовать Qt тогда QProcess это вариант.
Boost и Qt также предоставляют удобные средства для управления стандартным вводом / выводом дочернего процесса, если это важно. Если нет, то классические средства POSIX должны подойти.
Посмотрите на вызовы операционной системы Linux, fork() а также exec() , fork() вызов создаст две копии текущего процесса, которые продолжат выполняться одновременно.
- В родительском процессе fork() возвращаемое значение — это PID (идентификатор процесса)
дочерний процесс. - В дочернем процессе, fork() возвращаемое значение равно 0.
- По ошибке, fork() возвращаемое значение -1.
Вы можете использовать это в своих интересах, чтобы контролировать поведение родителя и ребенка. В качестве примера:
#include #include #include #include int main(int argc,char** argv) < char* progB = «/bin/progB»; char* args[progName, «arg1», «arg2», . NULL]; char* env[NULL]; // can fill in environment here. pid_t pid=fork(); if (pid==0) < // In child. execv(progB, args, env); >else if (pid == -1) < // handle error. >else < // In parent; pid is the child process. // can wait for child or kill child here. >>
Чтобы дождаться выхода вашего ребенка (в третьем случае выше), вы можете использовать ждать (2) , который возвращает pid вашего ребенка при успешном завершении или -1 при ошибке:
pid_t result = waitpid(pid,
Чтобы убить вашего ребенка превентивно, вы можете отправить сигнал об убийстве, как описано в убить (2) :
int result = kill(pid, SIGKILL); // or whatever signal you wish
Это должно позволить вам управлять своими процессами, как описано в исходном вопросе.
Источник: web-answers.ru
СМИ: Microsoft Surface Duo позволит запускать две программы одновременно
Будущий двухэкранный смартфон Surface Duo , как сообщают сетевые источники, получит целый ряд уникальных функций. Одной из них станет App Groups , которая позволит создавать общий ярлык для запуска двух приложений — по одному на каждый экран.
Технически это клон Samsung App Pair , система будет встроена в фирменный Microsoft Launcher. Источник уточняет, что таким образом можно одновременно запустить, к примеру, OneNote и Microsoft Edge. Или же это может быть браузер и мессенджер.
Помимо этого, в Surface Duo обещают поддержку стилуса и другие возможности. Как ожидается, смартфон покажут уже в августе.
Смартфону приписывают такие спецификации:
- Процессор Qualcomm Snapdragon 855
- 6 ГБ ОЗУ
- 64 или 256 ГБ постоянной памяти
- Два AMOLED-дисплея по 5,6 дюйма с соотношением сторон 4:3 и разрешением 1800×1350 каждый
- Камера с модулем на 11 МП
- Аккумулятор ёмкостью 3460 мА·ч.
- Microsoft выпустила утилиту для восстановления данных
- Tales of Monkey Island вернулась в Steam и GOG
- 20 минут геймплея Cyberpunk 2077 без лишних комментариев
Источник: www.igromania.ru