| 
  
    |  |   | 
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./showarticle.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 
  Comments: Comment this article. 
 
  | 
  
    |   | Does ACPI.PSD work on your notebook? Please press Fn + F1, Fn + F2, .. keys and collect the codes. Read more     |  |  |  |   
 
 
IBM OS/2 Warp
 |