From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 925 invoked by alias); 25 Nov 2003 08:30:37 -0000 Mailing-List: contact ecos-discuss-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@sources.redhat.com Received: (qmail 913 invoked from network); 25 Nov 2003 08:30:33 -0000 Received: from unknown (HELO londo.lunn.ch) (80.238.139.98) by sources.redhat.com with SMTP; 25 Nov 2003 08:30:33 -0000 Received: from lunn by londo.lunn.ch with local (Exim 3.36 #1 (Debian)) id 1AOYac-00067q-00; Tue, 25 Nov 2003 09:30:30 +0100 Date: Tue, 25 Nov 2003 08:30:00 -0000 To: Aravind B Cc: ecos-discuss@sources.redhat.com Message-ID: <20031125083030.GC21161@lunn.ch> Mail-Followup-To: Aravind B , ecos-discuss@sources.redhat.com References: <1069738146.1002.23.camel@ambica> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1069738146.1002.23.camel@ambica> User-Agent: Mutt/1.5.4i From: Andrew Lunn Subject: Re: [ECOS] therad delay problem X-SW-Source: 2003-11/txt/msg00355.txt.bz2 On Tue, Nov 25, 2003 at 10:59:06AM +0530, Aravind B wrote: > hi, > i have written a program which contains 3 thread as shown. > > cyg_user_start(void) > { > > printf("entering two threads cyg_user_start() function\n"); > > cyg_mutex_init(&cliblock); > cyg_thread_create(3,simple_program,(cyg_addrword_t)2, > "simple_program_Thread ",(void*) stack[2],4096, > &simple_program_Thread,&thread_s[2]); > cyg_thread_create(4,simple_program1,(cyg_addrword_t)3, > "simple_program1_Thread",(void*) stack[3],4096, > &simple_program1_Thread,&thread_s[3]); > cyg_thread_create(5,simple_program2,(cyg_addrword_t)4, > "simple_program2_Thread",(void*) stack[4],4096, > &simple_program2_Thread,&thread_s[4]); > > cyg_thread_resume(simple_program_Thread); > cyg_thread_resume(simple_program1_Thread); > cyg_thread_resume(simple_program2_Thread); > } > cyg_alarm_t alarm_Tbcn_func; > > void simple_program(cyg_addrword_t data ) > { > int message=(int) data; > unsigned int i; > printf("i am thread %d before delay\n",message); > > curr_time=cyg_real_time_clock(); > cyg_clock_to_counter(curr_time,&handle_counterTbcn); > cyg_alarm_create(handle_counterTbcn, alarm_Tbcn_func,5500, > &handle_alarmTbcn, &alarm_Tbcn); > cyg_alarm_initialize(handle_alarmTbcn,cyg_current_time()+200,0); > > cyg_thread_delay(3); > while(1) > { > if(var==1) > { > printf(" hello"); > break; > } > } > } > > void simple_program1(cyg_addrword_t data ) > { > int message=(int) data; > printf("i am thread %d\n",message); > } > > void simple_program2(cyg_addrword_t data ) > { > int message=(int) data; > printf("i am thread %d\n",message); > while(1) > { > } > } > void alarm_Tbcn_func( cyg_handle_t alarmTbcn,cyg_addrword_t data) > { > var=1; > printf(" i am in alarm function\n"); > } > > > there is cyg_thread _delay(3) in t1.the control goes to t2 and then > t3.In t3 i have infinite while loop.The control is not going to t1.Is > there any way so that i can signal to t1 that thread delay is over and > it can continue its flow.If so then how it is? Does the alarm hander get called? it var a volatile? Andrew -- Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos and search the list archive: http://sources.redhat.com/ml/ecos-discuss