С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
1 / 1 / 1
Регистрация: 03.03.2011
Сообщений: 44

Взаимодействие между процессами двух приложений

30.12.2012, 06:10. Показов 5472. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В задании к лабораторной сказано, что нужно открыть файл в одном приложении, а считывать данные с помощью другого приложения. Не могу представить, как это вообще должно происходить, можете объяснить на пальцах?

Текст задания:
Исследовать возможность создания двух приложений. Процессы, образованые после активации приложений, взаимодействуют между собой. Первое приложение содержит открытый файл Ф11 для считывания данных. Второе приложение считывает данные из файла первого приложения и по очереди передаёт их в файлы Ф21, Ф22, Ф23. Каждый из них открыт в своём отдельном потоке. ... Синхронизация с помощью критической секции, мьютекса, семафора.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.12.2012, 06:10
Ответы с готовыми решениями:

Организовать конвейерное взаимодействие между тремя процессами
Организовать конвейерное взаимодействие между тремя процессами: — первый процесс читает из текстового файла коэффициенты квадратного...

Взаимодействие двух приложений
Когда нужно чтобы два процесса Qt и консольный были связаны каналами для ввода запроса для загрузки веб страниц какие классы нужно юзать? ...

Взаимодействие двух разных приложений
1. Запущенных на одном компе. Самое простое - с помощью файла: одно приложение пишет данные в файл, другое его читает. Есть ли другие...

15
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.12.2012, 11:06
Цитата Сообщение от San-ch Посмотреть сообщение
Не могу представить, как это вообще должно происходить, можете объяснить на пальцах?
- ну вот про распараллеливание с помощью критической секции
Распараллеливание
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 11:21
для этого надо знать основы Win API.

я думаю так:
1.Создаешь процесс который открывает файл, записывает в него и т.д. Видимо эта информация/файл в разделяемой памяти.
2.Создаешь второй процесс и в нем потоки обработчики.
3.Процесс обращается к разделяемой памяти.
4.Информация в разделяемой памяти синхронизирована с помощью....
5.Создаешь потоки во втором процессе которые записывают информацию в файлы.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
30.12.2012, 11:25
Постановка задачи корявая. Как это- открыть файл на считывание одним приложением (может быть создать? тогда другое дело), а считывать другим? Впрочем, почему бы и не попробовать, чисто из учебных целей.

Теперь по синхронизации. Тут особо ничё синхронизировать и не надо- считывай себе и всё. Если бы стояла задача: один поток читает до позиции X, второй с позиции X до позиции Y, третий с позиции Y до позиции Z- то есть если бы работа одного потока зависела от результата работы другого- надо было бы синхронизровать. А тут каждый поток может считывать пока всё не считает и ничего о другом потоке не знать. Куда тут синхронизацию запихать? Не нужна она.
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 11:31
Цитата Сообщение от kravam Посмотреть сообщение
Постановка задачи корявая. Как это- открыть файл на считывание одним приложением (может быть создать? тогда другое дело), а считывать другим? Впрочем, почему бы и не попробовать, чисто из учебных целей.

ну видимо есть файл с информацией, которая записана заранее, вот его надо открыть.


Теперь по синхронизации. Тут особо ничё синхронизировать и не надо- считывай себе и всё. Если бы стояла задача: один поток читает до позиции X, второй с позиции X до позиции Y, третий с позиции Y до позиции Z- то есть если бы работа одного потока зависела от результата работы другого- надо было бы синхронизровать. А тут каждый поток может считывать пока всё не считает и ничего о другом потоке не знать. Куда тут синхронизацию запихать? Не нужна она.
так информация передается по очереди же. я не помню как работать с файлом, просто пример с массивом приведу, вот есть массив из 10 символов, вот первый поток передает первый символ, второй второй и т.д., вроде нормально, но поток же меняет счетчик, и если оба изменят, все- неверно будет.
может надо будет передавать информацию по строкам? может такая же ситуация быть?
ну или вариант передать файл полностью, то есть пока первый поток не отработает, не передаст, второму потоку нельзя обратится к файлу, вдруг там что-то изменится и т.д.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
30.12.2012, 12:13
pavlovnik, вот глобальный массив:

C++
1
2
char array [1000];
//инициализация array
функция потока:

C++
1
2
3
for (char i; i< 1000; i++) {
 //считывание массива array в файл ФN
}
ты же не хочешь сказать, что если один поток считает 500 байтов, а потом начнёт работать второй поток, то он начнёт считывание с 500-го байта? Нет, конечно. Считают себе спокойно весь массив каждый в свой файл ничё друг о друге не зная и всё на этом.

Добавлено через 31 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h> 
#include <pthread.h> 
#include <windows.h>
using namespace std;
 
 
 
 
//Функция потока, простосчитывает из одного файла в другой символы посимвольно.
void *task1(void *X) { 
 
 FILE* fp_0,* fp_1;
 fp_0= fopen ("src.txt", "r");
 fp_1= fopen ((char*)X, "w");
 if (fp_0&& fp_1) {
      int c;
      while ((c= getc (fp_0))!=EOF) {
       Sleep (1000);
       printf ("считал в %s\n", X);
       putc (c, fp_1);
      }
      fclose(fp_0); 
      fclose(fp_1); 
 }
 else {
  printf ("Всё плохо\n"); 
 }
 return NULL; 
} 
 
//////////////////////////////////////////////////////////////////////////////
 
int main(int argc, char *argv[]) { 
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 void* status; 
 
 pthread_t ThreadA; // Объявляем потоки. 
 pthread_t ThreadB; // Объявляем потоки. 
 pthread_t ThreadC; // Объявляем потоки. 
 pthread_create(&ThreadA,NULL,task1, (void*)"re0.txt"); // Создаем  потоки. 
 pthread_create(&ThreadB,NULL,task1, (void*)"re1.txt"); // Создаем  потоки. 
 pthread_create(&ThreadC,NULL,task1, (void*)"re2.txt"); // Создаем  потоки. 
 
 // Дополнительная обработка. 
 pthread_join(ThreadA, &status); // Ожидание завершения 
 pthread_join(ThreadB, &status); // Ожидание завершения 
 pthread_join(ThreadC, &status); // Ожидание завершения 
 getchar ();
 return (0) ; 
}
ну в общем все потоки считывают файл полностью не заботясь друг о друге как я и предполагал; чё тут за синхронизация может быть, остаётся загадкой.
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 13:29
значит я что-то не понимаю. Потоков несколько, они поочередно передают в файлы! А как соблюдать очередь без синхронизации? пока один поток всю информацию из файла не передаст в другой файл, следующий поток не может начать работу( по заданию а не по факту). А то создашь потоков и они будут параллельно выполняться.
при работе с общими файлами всегда нужна синхронизация.
А если у него программа делает так, что информацию передается,а пользователь взял и изменил её. Тогда уже следующий поток будет измененную информацию передавать, а ставишь синхронизацию, что не изменять, пока до конца не передаст или в это роде, чтобы все логично было. может так? для нас все равно условия загадка)

Добавлено через 56 секунд
да и в задании синхронизация есть, значит либо он там нужна, либо ее все равно надо запихнуть, по требованию разработчика)
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
30.12.2012, 14:06
заказчика, ты хотел сказать. Да там заказчик наверное как мы с тобой. Но в одном ты прав- условие загадка

Цитата Сообщение от pavlovnik Посмотреть сообщение
пока один поток всю информацию из файла не передаст в другой файл, следующий поток не может начать работу( по заданию а не по факту)
И опять- ну какая тут синхронизация? Последовательно потоки включаешь и всё на этом. Можно, конечно, придумать чтобы поток по окончании считывания сигнализировал об этом- семафор там мьютекс или ещё что. Наверное так и надо сделать.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.12.2012, 15:39
Цитата Сообщение от San-ch Посмотреть сообщение
Синхронизация с помощью критической секции, мьютекса, семафора.
Процессы как я помню нельзя синхронизировать с помощью критических секций - только потоки.

Добавлено через 2 минуты
Цитата Сообщение от San-ch Посмотреть сообщение
Первое приложение содержит открытый файл Ф11 для считывания данных. Второе приложение считывает данные из файла первого приложения
Оба для считывания, нужна ли тут синхронизация ?
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 21:03
Цитата Сообщение от kravam Посмотреть сообщение
И опять- ну какая тут синхронизация? Последовательно потоки включаешь и всё на этом. Можно, конечно, придумать чтобы поток по окончании считывания сигнализировал об этом- семафор там мьютекс или ещё что. Наверное так и надо сделать.

Стоп, как ты их последовательно то пустишь? По-моему ты пускаешь несколько потоков подряд, и они параллельно выполняются, если не напишешь функцию, WaitForMultipleObjects() ( надо конкретно смотреть сколько потоков ловить и т.д. Ведь запуская поток в майне дальше продолжается код и не останавливается, запускается следующий и следующий, а эта функция тормознет исполнение кода до наступления события. Поэтому мне и кажется что тут синхронизация должна быть, чтобы только ОДИН поток копировал файл, а остальные ждали)))

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Процессы как я помню нельзя синхронизировать с помощью критических секций - только потоки.


дальше смотри задание, создаются потоки, которые наверное и синхронизируются)

Добавлено через 2 минуты

Оба для считывания, нужна ли тут синхронизация ?
ун можно организовать синхронизацию доступа к файлу.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
30.12.2012, 21:22
Цитата Сообщение от pavlovnik Посмотреть сообщение
Стоп, как ты их последовательно то пустишь?
Уже пустил. Всё просто на самом деле:

"Функция pthread_join () используется для присоединения или воссоединения
потоков выполнения в одном процессе. Эта функция обеспечивает приостановку выполнения вызывающего потока до тех пор, пока не завершится заданный поток."

C++
1
2
3
4
5
6
 pthread_create(&ThreadA,NULL,task1, (void*)"re0.txt"); // Создаем  поток. 
 pthread_join(ThreadA, &status); // Ожидание завершения 
 pthread_create(&ThreadB,NULL,task1, (void*)"re1.txt"); // Создаем  поток. 
 pthread_join(ThreadB, &status); // Ожидание завершения 
 pthread_create(&ThreadC,NULL,task1, (void*)"re2.txt"); // Создаем  поток. 
 pthread_join(ThreadC, &status); // Ожидание завершения
Цитата Сообщение от pavlovnik Посмотреть сообщение
Поэтому мне и кажется что тут синхронизация должна быть, чтобы только ОДИН поток копировал файл, а остальные ждали)))
вот она и есть -та самая синхронизация с помощью pthread_join; сперва один поток потом второй потом третий. Только по заданию требуются семафоры мьютексы и критические секции.

Прошу любить и жаловать: библиотека pthread, в других билиотеках всяко-разно подобное должно присутствовать.
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 21:36
я просто только CreateThread знаю и все) поэтому там по-другому ) поэтому и пишу исходя из этого)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.12.2012, 21:46
Цитата Сообщение от pavlovnik Посмотреть сообщение
ун можно организовать синхронизацию доступа к файлу.
C помощью крит секций можно только потоки синхронизировать...
Цитата Сообщение от pavlovnik Посмотреть сообщение
я просто только CreateThread знаю и все) поэтому там по-другому ) поэтому и пишу исходя из этого)
А CreateProcess() ?
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
30.12.2012, 22:10
ну мы про создание потоков ж а не процессов)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.12.2012, 23:46
Ну так тема про процессы: "Взаимодействие между процессами двух приложений"
0
41 / 22 / 12
Регистрация: 07.12.2011
Сообщений: 114
31.12.2012, 14:57
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так тема про процессы: "Взаимодействие между процессами двух приложений"
два процесса взаимодействуют) во втором процессе создается несколько потоков для записи в разные файлы. Каждый поток записывает в свой файл) я понял так)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.12.2012, 14:57
Помогаю со студенческими работами здесь

Взаимодействие двух приложений (передача данных)
Всем привет. 2 программы находятся на 1 ПК. Подскажите, как можно реализовать взаимодействие 2 программ ( в частности, передача данных ).

Взаимодействие двух самостоятельных веб-приложений
Здравствуйте, у меня на данный момент возник вопрос: как обеспечить взаимодействие 2 самостоятельных веб-приложений asp.net mvc 4. Не знаю...

Как организовать обменн данными по сети между двух приложений?
Привет. Хочу создать 2 приложения, которые бы взаимодействовали через интернет и могли обмениваться данными. Смотрю tcp/ip, но не все...

Взаимодействие приложений на C++
Недавно прочитал как делаются боты для игр(вроде хартстоуна). Видел два типа: 1) взаимодействие по средствам управления курсором в окне...

Взаимодействие 2-х БД (2-х Приложений)
Всем привет! Задача в следующем: - Есть 2 приложения для одного бизнес-процесса. 1-е приложение взаимодействует с пользователем, 2-е для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru