Russian Qt Forum

Qt => Вопросы новичков => Тема начата: 5ORBEX от Апрель 18, 2013, 19:16



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

 Кто знает, как решить эти два вопроса ... Зарание благодарен


Название: Re: Буфер обмена и семафоры
Отправлено: Igors от Апрель 19, 2013, 07:17
Вместо QClipboard лучше использовать QSharedMemory. Проблемы Вы описали довольно торопливо и не очень внятно. Вероятно неприятности возникают когда один из процессов завершается, тогда второй ждет forever и зависает. Обычно это решается примерно так:

- буфер условно делится на 2 части, каждый процесс пишет в свою
- если процессу надо завершиться он записывает в свою часть условную сигнатуру/флажок типа "я отрубился" и толкает семафор


Название: Re: Буфер обмена и семафоры
Отправлено: 5ORBEX от Апрель 19, 2013, 15:32
а как тогда писать и читать в QShared Memory .... можете написать пример, например записи и чтения в QSharedMemory строки QString ...


Название: Re: Буфер обмена и семафоры
Отправлено: Igors от Апрель 20, 2013, 09:20
а как тогда писать и читать в QShared Memory .... можете написать пример, например записи и чтения в QSharedMemory строки QString ...
Не можете потому что так делать не нужно. Храните в QSharedMemory сериализованные данные, считайте что это как бы "быстрый файл". Не забывайте делать lock()