Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: star62 от Август 05, 2009, 07:45



Название: Прошу помощи pipe (поименованный канал) Не работает в GUI
Отправлено: star62 от Август 05, 2009, 07:45
Добрый день всем. Проблема такая. Хочу устроить обмен данными между двух приложений в Linux Fedora 11. Использую поименованные каналы.

Но вот незадача. В консоли все работает, а в ГУИ не хочет. Не пойму почему.

Дело обстоит так, в стандартном приложении с MainWindow на клик мыши вешается обработчик:
Код
C++ (Qt)
void MainWindowImpl::load(){
pFile = NULL;
int t = mkfifo(FIFO_NAME, 0600);
if(t != 0){
QMessageBox::information(this, "Error", "t = "+QString::number(t));
exit(1);
}
perror("mkfifo() error");
pFile = fopen(FIFO_NAME, "rb");
if (!pFile){
QMessageBox::information(this, "Error", "Not open file");
}
}
 

И происходит следующее...
mkfifo(FIFO_NAME, 0600); создает файл, t = 0;
perror("mkfifo() error"); пишет следующее "mkfifo() error: Ресурс временно недоступен" Вот тут главный вопрос, почему? Кто его блокирует?
и как следствие pFile = fopen(FIFO_NAME, "rb");  виснет и весь обработчик за ней


Если все тоже самое сделать в простом консольном приложении тогда perror("mkfifo() error"); пишет "mkfifo() error: Success" и все в порядке

Помоги, объясните в чем причина и как исправить?
P.S. Все делаю в QDevelop


Название: Re: Прошу помощи pipe (поименованный канал) Не работает в GUI
Отправлено: ритт от Август 05, 2009, 08:02
есть одна мыслишка, но пока воздержусь...

а почему не использовать QLocalSocket?


Название: Re: Прошу помощи pipe (поименованный канал) Не работает в GUI
Отправлено: star62 от Август 05, 2009, 08:51

а почему не использовать QLocalSocket?

Честно, не знал, можно попробовать. Вот только тогда среда передачи ограничивается Qt, а так можно было бы и не Qt приложения цеплять. (Хотя может я и не прав, надо разобраться подробнее с сокетами)

И все таки хотелось бы услышать соображения по поводу изначальной проблемы :)


Название: Re: Прошу помощи pipe (поименованный канал) Не работает в GUI
Отправлено: star62 от Август 05, 2009, 18:11
Решил задачу через QLocalSocket и QLocalServer. Работает. Но для полного удовлетворения нехватает понимания функций
bool waitForConnected ( int msec = 30000 )
bool waitForDisconnected ( int msecs = 30000 )
virtual bool waitForReadyRead ( int msecs = 30000 )

Если не трудно объясните по русски их :) Что делают, для чего и где необходимы.

Из прочитанного на англицком, порядка в голове не наступило. Понятно что они очень важны, но не более.