|
|
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
Kommentare: Kommentiere diesen Artikel.
|
How to prevent data loss? a) don't use old version of JFS driver. b) Don't boot from old eCS CD1 (if you take eCS 2.0 CD1, then disable its disk checker else it can kill your partitions), Advice how to use JFS filesystem |
|
|
 |
IBM OS/2 Warp
|