НОВОЕ: OS/2 GURU - Вопросы и ответы

12345

Reviews / articles about OS/2

Operating systems:
ArcaOS, eComStation, IBM OS/2 Warp
eComStation myths 

Latest  
 
 

Unsorted

 

 

AD: ArcaOS 5.1 Russian LIP
Russian ARCAOS exists and it's available since the middle of 2017. All versions are supported: 5.1, 5.1.1.

eCo Software is able to maintain OS/2 LIP packages for any other language (German, Dutch, Brazilian Portuguese, Spanish, Sweden, etc)

My EMX program takes much CPU


TITLE: My EMX program takes much CPU

DATE: 2001-08-14 00:32:52

AUTHOR: nickk
Please use online translator
go to http://translate.google.com
and request the translation of http://ru.ecomstation./projects/reviews/index.php?id=5
to your language

... EMX ......... ...... ..... CPU

.... .. .............. .........-..... . ....... gcc . ........, ... ... ...... ....... ..... CPU .. ..... ...... (........ .... .. .........., . ............. .........., ........, . ....... top) .... .. ..... ......., ........., ........... .. .. ....... select. .... ... ..., .......... ........ .. .. ............. .......:

int ibm_select( int *fds, int n_read, int n_write, int n_exept, long timeout);

int os2_select (int nfds, fd_set *readfds, fd_set *writefds,
             fd_set *exceptfds, struct timeval *timeout)
/* We are using the EMX select() call if non-socket handlers
   are presented in sets and IBM select() otherwise.
   EMX select() causes high CPU usage in polling loop.
*/
.
    fd_set *fds[3] = . readfds, writefds, exceptfds .;
    int fd_os2[FD_SETSIZE * 3], fd_emx[FD_SETSIZE * 3];
    int n_fd[4], n = 0;
    int i, k, s;
    long ibmtimeout = -1;

    for(k = 0; k < 3; k++) .
	n_fd[k] = n;
	if(!fds[k])
	    continue;

	for(i = 0; i < nfds; i++) .
	    if(!fds[k]->fds_bits[i>>5]) .
		i += 31;
		continue;
	    .
	    if(!FD_ISSET(i, fds[k]))
		continue;
	    s = _getsockhandle(i);
	    if(s < 0) 
		return select(nfds, readfds, writefds, exceptfds, timeout);
	    else .
		fd_os2[n] = s;
		fd_emx[n++] = i;
	    .
        .
    .

    n_fd[3] = n;

    if (timeout) ibmtimeout = timeout->tv_usec/1000 + timeout->tv_sec*1000;
    s = ibm_select(fd_os2, n_fd[1]-n_fd[0], n_fd[2]-n_fd[1], n_fd[3]-n_fd[2],
			ibmtimeout);

    if(s == 0)			/* Timeout */
	return 0;
    if(s < 0) .			/* Error */
	if(sock_errno() == 10004)		/* SOCEINTR */
	    errno = EINTR;
	else
	    errno = EINVAL;
	return -1;
    .

    i = 0;
    for(k = 0; k < 3; k++) .
	n = n_fd[k+1];
	for( ; i < n; i++)
	    if(fd_os2[i] < 0) 
		FD_CLR(fd_emx[i], fds[k]);
    .
    return s;
.

... ....... ibm_select . sock_errno() ....... .. so32dll.dll:

; ibmtcp.imp
; -------- so32dll entry points --------
ibm_select              so32dll   12 ?
sock_errno              so32dll   20 ?

..... ........ .... . ..... ........., .........: emximp -o ibmtcp.a ibmtcp.imp.

...... .... ...... EMX'.... select .. ..............., ....... ........ . ........... . ... - "EMX select() causes high CPU usage in polling loop". ......., .... .. ........... select ...... ........ ......, .. ..... ...... .. ....... - ........ ........ .. ..... .. ......

... ......., ...... ........ ....... .......... ......... . .. ..... ......... OS/2 ..... squid, bind, sshd, wget...

....... EMX ..... ! :)

..... ......: nickk

Test the program:

[You can promote your application here, contacts]

Comments:

eCo Software is a group of russian developers.
How to support eCo Software? (you can send us some computers. Maybe you don't use the device but it may be useful for the developers). We have the mailboxes in USA, Netherlands, China and Hong Kong.

 


 

 

ArcaOS 5.1.1 whatsnew - PNG icons

PNG icons on Desktop

PNG icons on Desktop. (instead of ancient .ico designed in 1994)

eComStation developer

eCo Software was the leading developer of modules for eComStation 2.0

// надо на ENG!!
Blonde Guy

Reformat Утилита для форматирования USB флешек, USB винчестеров (для совместимости с OS/2)

Warpstock Europe 2000

The conference ... clip about the conference:

 

(C) OS2.GURU 2001 -- 2025