#define MY_PULSE2 _PULSE_CODE_MINAVAIL+2
struct mes{
short type;
struct sigevent event;
};
int main(){
int fd, rcvid, chid, coid;
struct _pulse pulse;
name_attach_t *attach;
struct sigevent event;
chid = ChannelCreate( 0 );
coid = ConnectAttach( 0, 0, chid, 0, 0 );
fd = name_open( PATH, 0 );
if( fd == -1 ){
printf("Client name open error\n" );
exit( EXIT_FAILURE );
}
SIGEV_PULSE_INIT( &event, coid, SIGEV_PULSE_PRIO_INHERIT,
MY_PULSE2, 0 );
MsgSendPulse( fd, 10, MY_PULSE1, 21 );
MsgSendPulse( fd, 10, MY_PULSE2, 8 );
name_close( fd );
return 0;
}
Server
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/neutrino.h>
#include <sys/iomsg.h>
#include <sys/iofunc.h>
#include <sys/dispatch.h>
#define ATTACH_POINT "channel_msg_"
#define MY_PULSE1 _PULSE_CODE_MINAVAIL+1
#define MY_PULSE2 _PULSE_CODE_MINAVAIL+2
int main(){
name_attach_t *attach;
int rcvid, val, coid;
struct _pulse pulse;
struct sigevent event;
if ((attach = name_attach(NULL, ATTACH_POINT, 0)) == NULL) {
printf("name attach fail\n");
return EXIT_FAILURE;
}
coid = ConnectAttach( 0, 0, attach->chid, 0, 0 );
while(1){
rcvid = MsgReceivePulse( attach->chid, &pulse, sizeof( pulse ), NULL );
if( pulse.code > 0 ){
//User Pulse
switch( pulse.code ){
case MY_PULSE1:
printf("Get Pulse 1 : value = %d\n", pulse.value.sival_int );
break;
case MY_PULSE2:
printf("Get Pulse 2 : value = %d\n", pulse.value.sival_int );
break;
}//end switch
} else{
printf("Get system pulse\n");
if( pulse.code == _PULSE_CODE_DISCONNECT )
printf("Client disconnect\n");
}
}//end while(1)
name_detach(attach, 0);
return 0;
}
Для упрощения отсортируем информацию окна Trace Event Log, оставив только Communication.
Рис. 14
Рис. 15
Рис. 16
При выполнении данной программы клиент отправляет подряд 2 пульса (с разницей 34 мкс), что отображено на рис. 15. Далее пульсы принимаются и обрабатываются сервером. При этом на доставку первого пульса (рис. 16) уходит 454 мкс, что значительно больше, чем в предыдущем варианте отправки пульса.
Обмен сообщениями между потоками одного процесса:
#include <pthread.h>
#include <stdio.h>
#include <sys/iofunc.h>
#include <sys/dispatch.h>
#include <stdlib.h>
#include <stddef.h>
#include <process.h>
pthread_t t1, t2;
void* thread1( void* );
void* thread2( void* );
int main()
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.