Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/92: Рейтинг темы: голосов - 92, средняя оценка - 4.51
2 / 2 / 0
Регистрация: 13.02.2012
Сообщений: 83
1

Передача данных другой программе используя shared memory

28.06.2012, 12:52. Показов 18487. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется передать другой программе данные. Остановился на варианте с использованием разделяемой памяти (shared memory)

Подскажите пожалуйста простенький примерчик как это реализуется на qt. Плииз
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2012, 12:52
Ответы с готовыми решениями:

Передача данных другой программе
Доброго времени суток! Не мог бы кто-то помочь с таким вопросом: Как передавать данные с одного...

Передача данных другой программе
Привет, всем хотел начать делать свой небольшой мп3 плеер, и столкулся с одной очень важной для...

Shared memory
Микроконтроллер загружает необходимую информацию в shared memory по заранее известным адресам. Как...

Shared Memory
В версии языка 3.8 есть возможность использовать общую память. Вот таким образом можно...

9
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
28.06.2012, 13:04 2
вы мне не поверите, но есть пример с использованием разделяемой памяти( shared memory) между потоками (QThread), этот клас называется QtSharedMemory. а пример называется "Shared memory between threads".

Обажаю куте, все предельно просто, вопрос только гуглу надо задавать на трушном для куте языке - англицком
1
Почетный модератор
11531 / 4325 / 449
Регистрация: 12.06.2008
Сообщений: 12,428
28.06.2012, 13:12 3
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
QSharedMemory mem;
mem.setKey("MyKey");
if (!mem.create(1024)) // занимаем 1024 байта памяти
{
...... // если не удалось
}
char *data = (char*)mem.data(); // указатель на общую память
if (mem.lock()) // это приложение начинает работу с общей памятью
{
  QByteArray ar = "Hello\0";
  for (int i=0;i<ar.size();i++) // записываем данные в общую память
    data[i] = ar[i];
  mem.unlock(); // заканчиваем работу с общей памятью
}
а другое приложение делает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QSharedMemory mem;
mem.setKey("MyKey");
if (!mem.attach()) // подключаемся к уже созданной памяти
{
.... // если не удалось
}
char *data = (char*)mem.data(); // указатель на общую память
if (mem.lock())
{
  QByteArray ar;
  for (int i=0;data[i];i++)
    ar.append(data[i]);
  mem.unlock();
  // теперь массив ar содержит строку "Hello", которую передало другое приложение
}
Примерно так... могут быть неточности, т.к. писал в окне браузера, ориентируясь на более громоздкий пример.
4
2 / 2 / 0
Регистрация: 13.02.2012
Сообщений: 83
28.06.2012, 14:49  [ТС] 4
а файлы можно как-нибудь передавать ?
0
Почетный модератор
11531 / 4325 / 449
Регистрация: 12.06.2008
Сообщений: 12,428
28.06.2012, 15:48 5
Цитата Сообщение от Арий Монтана Посмотреть сообщение
а файлы можно как-нибудь передавать ?
Можно таким же образом полное имя файла передать, что бы второе приложение его прочитало... ведь, они же на одном и том же компьютере.
1
2 / 2 / 0
Регистрация: 13.02.2012
Сообщений: 83
28.06.2012, 16:02  [ТС] 6
Цитата Сообщение от Humanoid Посмотреть сообщение
Можно таким же образом полное имя файла передать, что бы второе приложение его прочитало... ведь, они же на одном и том же компьютере.
можете пример с передачей файлов еще выложить, пожалуйста
0
Почетный модератор
11531 / 4325 / 449
Регистрация: 12.06.2008
Сообщений: 12,428
28.06.2012, 16:11 7
Тоже самое, только вместо
"Hello\0"
можно указать
"D:/My Dir/myfile.txt\0"

Ну а если имя будет известно позже, то
C++ (Qt)
1
2
3
QString fname = получаем имя файла откуда-то... например с формы
........
QByteArray ar = fname.toUtf8().append("\0"); // переводим QString в QByteArray (русские буквы будем считать как UTF-8) и добавляем нулевой символ как знак конца строки
1
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
28.06.2012, 21:43 8
Цитата Сообщение от Humanoid Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
QSharedMemory mem;
mem.setKey("MyKey");
if (!mem.create(1024)) // занимаем 1024 байта памяти
{
...... // если не удалось
}
char *data = (char*)mem.data(); // указатель на общую память
if (mem.lock()) // это приложение начинает работу с общей памятью
{
  QByteArray ar = "Hello\0";
  for (int i=0;i<ar.size();i++) // записываем данные в общую память
    data[i] = ar[i];
  mem.unlock(); // заканчиваем работу с общей памятью
}
а другое приложение делает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QSharedMemory mem;
mem.setKey("MyKey");
if (!mem.attach()) // подключаемся к уже созданной памяти
{
.... // если не удалось
}
char *data = (char*)mem.data(); // указатель на общую память
if (mem.lock())
{
  QByteArray ar;
  for (int i=0;data[i];i++)
    ar.append(data[i]);
  mem.unlock();
  // теперь массив ar содержит строку "Hello", которую передало другое приложение
}
Примерно так... могут быть неточности, т.к. писал в окне браузера, ориентируясь на более громоздкий пример.

Не по теме:

что-то мне это такими жуткими дырами пахнет, не могу объяснить почему, но жуть как не нравится эта технология :)

1
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
29.06.2012, 00:03 9
QFile::map() а через шару передать адрес начала и длину
1
Humanoid
29.06.2012, 11:11     Передача данных другой программе используя shared memory
  #10

Не по теме:

l_a_m, я тоже после экспериментов отказался.

0
29.06.2012, 11:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2012, 11:11
Помогаю со студенческими работами здесь

Shared memory does not exist
Доброе утро! Столкнулся с такой проблемой, Oracle 8.1, лет 20 крутится около 18 схем и начала...

Не могу разобраться с Shared memory
Доброго времени суток, возникла проблема при использовании разделяемой памяти. При написании 2...

Creating Named Shared Memory
Здравствуйте. Пытаюсь освоить работу с общей памятью двух разных программ, используя FileMapping,...

Pipe, fork, shared memory
Доброго времени суток. Помогите пожалуйста написать программу: Процесс читает с клавиатуры и пишет...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru