|
Upgrade ArcaOS to NeoWPS level
- Install original PNG icons drawed by designer, specialized at OS/2 adornation.
- Install eSchemes 2018 to change colors and buttons on desktop.
|
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
Test the program:
|
Virtual machine for eComStation? How to run eComStation inside virtual machine? (Read more..)
|
Comments: Comment this article.
|
eComStation 2.0 may be installed to computer with Windows 7. You can find the instructions in eCSFAQ and Installation Guide. |
|
|
|
IBM OS/2 Warp
|