Запускается две программы одновременно

Каким образом можно выполнять несколько задач одновременно? Например: выполняется цикл и одновременно выполняется еще один цикл.

Отслеживать
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 в любой момент. Обе программы должны работать одновременно, так что программе А не нужно ждать, пока программа В вернется, прежде чем продолжить работу с программой А.

Читайте также:
Пошаговая инструкция как пользоваться программой trackview

Есть идеи? Спасибо!

Решение

В 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); >>

Другие решения

У вас есть несколько вариантов здесь:

  1. Традиционный POSIX вилка / Exec (Есть буквально тонны примеров того, как сделать это в SO, например, этот один).
  2. Если вы можете использовать Boost, то Ускорить процесс это вариант.
  3. Если вы можете использовать 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 позволит запускать две программы одновременно

СМИ: 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru