Russian Qt Forum
Ноябрь 26, 2024, 00:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Буфер обмена и семафоры  (Прочитано 2314 раз)
5ORBEX
Гость
« : Апрель 18, 2013, 19:16 »

Привет форумчане ... Работаю под линукс .. Запускаю одновременно два процесса ... Первый процес должен записать какие то данные в буфер обмена, а второй - их оттуда прочитать ... Чтоб не было так, что второй читае, а первый еще не успел записать, использую семафор ... Буфер создавал с помощью QClipboard, семафор - QSystemSemaphore ... возникла такая проблема:
 1) Если завершить процес, то содержимое буфера затираеться, и второй процес не имете что читать
 2) Если использовать семафоры, то в содержимое буфера перед тем, что записал первый процес, еще записиваються какие то символы ... тоесть второй процес с буфера будет читать не правильные данные ..

 Кто знает, как решить эти два вопроса ... Зарание благодарен
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Апрель 19, 2013, 07:17 »

Вместо QClipboard лучше использовать QSharedMemory. Проблемы Вы описали довольно торопливо и не очень внятно. Вероятно неприятности возникают когда один из процессов завершается, тогда второй ждет forever и зависает. Обычно это решается примерно так:

- буфер условно делится на 2 части, каждый процесс пишет в свою
- если процессу надо завершиться он записывает в свою часть условную сигнатуру/флажок типа "я отрубился" и толкает семафор
Записан
5ORBEX
Гость
« Ответ #2 : Апрель 19, 2013, 15:32 »

а как тогда писать и читать в QShared Memory .... можете написать пример, например записи и чтения в QSharedMemory строки QString ...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 20, 2013, 09:20 »

а как тогда писать и читать в QShared Memory .... можете написать пример, например записи и чтения в QSharedMemory строки QString ...
Не можете потому что так делать не нужно. Храните в QSharedMemory сериализованные данные, считайте что это как бы "быстрый файл". Не забывайте делать lock()
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.142 секунд. Запросов: 22.