Получение из очереди сообщений - PullRequest
0 голосов
/ 09 августа 2010

Я успешно создал очередь сообщений с помощью следующей команды:

msgIdHareTurtle =  msgget(keyHareTurtle, 0644 | IPC_CREAT | O_NONBLOCK);  

Теперь я хочу отправить очередь в какой-то другой процесс, который я использовал,

msgsnd(msgIdHareTurtle, (struct msgbuf *)&bufHareTurtle, sizeof(int), IPC_NOWAIT);  

и япопробуйте получить его в другом процессе:

msgrcv(msgIdHareTurtle, (struct msgbuf *)&bufHareTurtle, sizeof(int), 0, IPC_NOWAIT);

моя структура bufHareTurtle имеет следующий тип:

typedef struct smsgbuf{
    long mtype;
    unsigned int position;
} smsgbuf; 

Мой вопрос: отправка прошла успешно, и программа (оба процесса)тоже работает, но всякий раз, когда я отправляю целое число без знака, например, 2, Я ВСЕГДА ПОЛУЧАЮ ПОЛУЧЕННОЕ ЗНАЧЕНИЕ (В ПРОЦЕССЕ ПОСЛЕДНЕГО РАЗДЕЛА) КАК 0 ВСЕГДА.Может ли кто-нибудь сказать мне, что является ошибкой в ​​этом коде или что может быть ошибкой в ​​другом месте.

1 Ответ

0 голосов
/ 22 августа 2010

Проблема была в синхронизации. Отправка в очередь была отложена из-за промежуточного сна. Я исправил это, и ошибка исчезла

...