Project Home
Project Home
Trackers
Trackers
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
BroadcastCommunity.qnx.com will be offline from May 31 6:00pm until June 2 12:00AM for upcoming system upgrades. For more information please go to https://community.qnx.com/sf/discussion/do/listPosts/projects.bazaar/discussion.bazaar.topc28418
Forum Topic - 3 questions to expirienced users: Page 1 of 12 (12 Items)
   
3 questions to expirienced users  
3 questions to experienced QNX developers and users.

At unsophisticated user's first glance QNX 6.4.0 has many advantages as 
compared with QNX previous versions. However, some unfortunate shortcomings 
was inheretied from QNX 6.3.*.

///////////////////////////////////////////////////////////////////////////
1) Vagueness with valid limits of ualarm() function arguments. 
Example program in HELP includes line of code with 10 seconds argument 
/*ualarm((useconds_t)(10*1000*1000),0);*/. In fact function ualarm() can't 
realize  large time intervals. Below is simple program and its rezults.

=========================================================================
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>

#define BILLION  1000000000L;
//-----------------------------------------------------------------------
main(int argc, char **argv)
{
    sigset_t set;
    siginfo_t info;
    struct timespec start, stop;
    double accum;	
    int first_alarm = atoi(argv[1]);
    int subsequent_alarms = atoi(argv[2]);
    int i;

    printf("Process with pid %d started\n", getpid());
    sigemptyset(&set);
    sigaddset(&set, SIGALRM);
	
    printf("First_alarm time=%d s,  subsequent_alarms period=%d s\n", 
first_alarm, subsequent_alarms);
    ualarm((useconds_t) (first_alarm * 1000 * 1000), (useconds_t) 
(subsequent_alarms * 1000 * 1000));			
    for(i=0; i<10; i++)
    {
    	clock_gettime( CLOCK_REALTIME, &start);
    	sigwaitinfo(&set, &info);
    	clock_gettime( CLOCK_REALTIME, &stop);
	accum = (stop.tv_sec - start.tv_sec) + (double)(stop.tv_nsec - 
start.tv_nsec) / (double)BILLION;
	printf("Received signal %d with code %d. Time elapsed %lf\n", 
info.si_signo, info.si_value, accum);
    }
}
/*
# qcc -oualarm_glitch2.out ualarm_glitch2.c
# ./ualarm_glitch2.out 15 2
Process with pid 753706 started
First_alarm time=15 s,  subsequent_alarms period=2 s
Received signal 14 with code 0. Time elapsed 2.116676 // was set to 15 s ????
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 2.000694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 2.000694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 2.000694
#

# ./ualarm_glitch2.out 250 2
Process with pid 778282 started
First_alarm time=250 s,  subsequent_alarms period=2 s
Received signal 14 with code 0. Time elapsed 0.893863 // was set to 250 s ????
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 2.000694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 2.000694
Received signal 14 with code 0. Time elapsed 1.999694
Received signal 14 with code 0. Time elapsed 1.999694
#
*/
=========================================================================
 
If it is a bug in function ualarm() code, it must be corrected. Otherwise it 
is desirable correct HELP documentaion similar to HELP on usleep() function
 /*useconds The number of microseconds that you want to process to sleep for. 
This must be less than 1,000,000.*/	


/////////////////////////////////////////////////////////////////////////////
2) Erroneous rezults of bc utility with some sets of data. For example:

#...
View Full Message