delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2004/02/11/22:30:30

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: atlas_wang AT yahoo DOT com (Wang Yong)
Newsgroups: comp.os.msdos.djgpp
Subject: Thread Swithing Time in pth1.3.7?
Date: 11 Feb 2004 19:22:25 -0800
Organization: http://groups.google.com
Lines: 85
Message-ID: <78a4a70a.0402111922.59344047@posting.google.com>
NNTP-Posting-Host: 202.172.41.100
X-Trace: posting.google.com 1076556146 30292 127.0.0.1 (12 Feb 2004 03:22:26 GMT)
X-Complaints-To: groups-abuse AT google DOT com
NNTP-Posting-Date: Thu, 12 Feb 2004 03:22:26 +0000 (UTC)
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hi, 

I am testing pth1.3.7 for DJGPP, and I am curious about the
thread-switching time of it. See the following example:

#include <pth.h>
#include <stdio.h>
#include <conio.h>
#include <pc.h>

unsigned short  uPort = 0x378;
unsigned char   uchData = 0x0;

void *print_xs(void *unused)
{
    while (1) {
        uchData ^= 0x01;        /* bit0 */
        outp(uPort, uchData);
        pth_yield(NULL);
        uchData ^= 0x01;        /* bit0 */
        outp(uPort, uchData);
    }
    return NULL;
}

void *print_ys(void *unused)
{
    while (1) {
        uchData ^= 0x02;        /* bit1 */
        outp(uPort, uchData);
        pth_yield(NULL);
        uchData ^= 0x02;        /* bit1 */
        outp(uPort, uchData);
    }
    return NULL;
}

int main(void)
{
    pth_init();
    pth_spawn(NULL, print_xs, NULL);
    pth_spawn(NULL, print_ys, NULL);
    outp(uPort, uchData);

    while (1) {
        uchData ^= 0x04;        /* bit2 */
        outp(uPort, uchData);
        uchData ^= 0x04;        /* bit2 */
        outp(uPort, uchData);
        pth_yield(NULL);
    }

    pth_kill();
    return 0;
}

I use osilliscope to measure the signal from parallel port and find
that that the the time beteen rising edges is around 760 microseconds!
To be honest, it is too large to use in a time-critical environment.

The testing environment:
CPU: PII-350
CHIPSET: INTEL 440BX
MEMORY: 32M
OS: MS-DOS 6.22
COMPILER: DJGPP 2.04 alpha 1

Makefile: 
CC = gcc
CFLAGS = -O3 -Wall
PROJ = thtst
OBJS = thtst.o
LIB_OPTS = -lpth -lsocket
TARGET : $(PROJ).exe
$(PROJ1).exe : $(OBJS)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(LIB_OPTS)
	exe2coff $@
	cat -B c:\djgpp\bin\cwsdstub.exe $(PROJ) >$@
	rm -f $(PROJ)
$(OBJS) : %.o : %.c
	$(CC) $(CFLAGS) -c $<
.PHONY : clean
clean :
	rm -f *.o
	rm -f $(PROJ).exe

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019