public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
From: amit mishra <infoworldindia@yahoo.com>
To: jasvinder bajwa <jasvinder_bajwa9@hotmail.com>,
	pthreads-win32@sources.redhat.com
Subject: Re: Threading Issue - Program hangs on Ctrl-C - URGENT PLZ
Date: Mon, 20 Oct 2003 04:59:00 -0000	[thread overview]
Message-ID: <20031020045953.6560.qmail@web41001.mail.yahoo.com> (raw)
In-Reply-To: <BAY9-F39nIgJhTq1nTA0002ed8f@hotmail.com>

Hi,
Thanks Jasvinder for reply & suggestion.

After changing the optimization to "default" in MSVC++
project settings (Release Mode), the issue of computer
getting hanged has been resolved.

This is a KNOWN BUG :~ "Cancellation problems in
optimised code" 
http://sources.redhat.com/pthreads-win32/bugs.html

"I think the message of this section is that usage of
VCE version of pthreads in applications relying on
cancellation/cleanup AND using optimisations for   
creation of production code is highly unreliable for
the current version of the pthreads library."

Does it mean, I should use Win32 threads API rather
than pthread-win32 when optimization is highly
required ???

Regards,
Amit


--- jasvinder bajwa <jasvinder_bajwa9@hotmail.com>
wrote:
> 
> Hi Amit,
> In all your thread functions , you have statement do
> { } while(true) and 
> trying to read from comm ports.
> I guess you are looking for a graceful way of
> shutting down the threads.
> i will suggest you to set a global variable
> something like timeToExit = 1;
> change the condition to run the thread for ever to
> do { } while(timeToExit)
> and when your applicaion catches Ctrl+C or any
> unwanted signal set the 
> timeToExit to 0 which will cause all the threads to
> exit.
> 
> I guess it may solve the issue.
> Thanks
> Jas
> 
> 
> 
> >From: amit mishra <infoworldindia@yahoo.com>
> >To: pthread <pthreads-win32@sources.redhat.com>
> >Subject: Re: Threading Issue - Program hangs on
> Ctrl-C - URGENT PLZ
> >Date: Fri, 17 Oct 2003 23:14:08 -0700 (PDT)
> >
> >Hi Ross,
> >
> >Thanks for the reply.
> >I suppose the threads are not able to exit
> properly.
> >Since all the threads are never going to terminate
> as
> >it continues to read from respective COM ports,
> there
> >should be some mechanism to end the thread
> gracefully.
> >
> >Could anyone give me sample code to test with for
> >handling signals like Ctrl-C or to gracefully end
> the
> >pthreads.
> >
> >Also, what should be the ideal mechanism for ending
> >the threads when threads are continuosly running
> (i.e.
> >its not going to terminate until some signal like
> >Ctrl-C is given) ??
> >
> >Many Thanks
> >Amit
> >
> >
> >
> >
> >
> >--- Ross Johnson <rpj@callisto.canberra.edu.au>
> wrote:
> > > I don't have any direct experience in this area
> but
> > > I believe exception
> > > management in MT applications is tricky, so I
> > > apologise in advance for
> > > responding with questions.
> > >
> > > Questions:
> > > What happens to the other threads when one
> thread
> > > catches the exception
> > > generated by ctrl-C?
> > > What if the exception arrives while the thread
> holds
> > > the mutex?
> > >
> > > Ross
> > >
> > > amit mishra wrote:
> > >
> > > >Hi,
> > > >I had a simple serial port communication
> > > application
> > > >which uses pthread-win32 for threading.
> > > >
> > > >When the program exits, the application hangs
> and
> > > the
> > > >only way to recover is to restart the machine.
> > > >
> > > >I have debugged and the issue seems to be
> regarding
> > > >thread handling or signal handling.
> > > >
> > > >Code snippet is given below for reference. Feel
> > > free
> > > >to ask for more information.
> > > >
> > > >Please reply asap.
> > > >Many Thanks
> > > >Amit
> > > >--- CODE STARTS ------------------------------
> > > >// all header files not shown
> > > >
> > > >#include "pthread.h"
> > > >#include "signal.h"
> > > >
> > > >// three threads for each ports
> > > >pthread_t t[3];
> > > >int result = 0;
> > > >int tid1, tid2, tid3;
> > > >
> > > >void* portOneFunc(void* arg);
> > > >void* portTwoFunc(void* arg);
> > > >void* portThreeFunc(void* arg);
> > > >
> > > >CDataOne* data1 = NULL;
> > > >CDataTwo* data2 = NULL;
> > > >CDataThree* data3 = NULL;
> > > >
> > > >// Custom Mutex class using pthread mutex
> > > >CMyMutex myMutex;
> > > >CWinApp theApp;
> > > >
> > > >//////////////////////////////////////////
> > > >// Main
> > > >//////////////////////////////////////////
> > > >
> > > >int _tmain(int argc, TCHAR* argv[], TCHAR*
> envp[])
> > > >{
> > > >// ---Initialize COMM Ports---
> > > >CCommPort p1(RS_COM1);	// COM1
> > > >CCommPort p2(RS_COM2);		// COM2
> > > >CCommPort p3(RS_COM3);		// COM3
> > > >
> > > >// Init various Data Analyzers
> > > >data1 = new CDataOne();
> > > >data2 = new CDataTwo();
> > > >data3 = new CDataThree();
> > > >
> > > >try {
> > > >	// --------- Create Threads ------------
> > > >	// Pthread Create
> > > >	tid1 = pthread_create(
> > > >		&t[0], NULL, portOneFunc, &p1);
> > > >	tid2 = pthread_create(
> > > >		&t[1], NULL, portTwoFunc, &p2);
> > > >	tid3 = pthread_create(
> > > >		&t[2], NULL, portThreeFunc, &p3);
> > > >
> > > >	// -------- Wait for Threads to complete ----
> > > >	// Pthread Join
> > > >	int ret = 0;
> > > >
> > > >	if (pthread_join(t[0], (void **) &result)) {
> > > >		cout << "pthread join error" << endl;
> > > >
> > > >	}
> > > >	if (pthread_join(t[1], (void **) &result)) {
> > > >		cout << "pthread join error" << endl;
> > > >	}
> > > >	if (pthread_join(t[2], (void **) &result)) {
> > > >		cout << "pthread join error" << endl;
> > > >	}
> > > >
> > > >} PtW32CatchAll {
> > > >	cerr << "ERROR : Thread Error" << endl;
> > > >}
> > > >
> > > >delete data1;
> > > >delete data2;
> > > >delete data3;
> > > >
> > > >return 0;
> > > >}
> > > >
> > > >
> > > >//////////////////////////////////////////
> > > >// Thread Functions
> > > >//////////////////////////////////////////
> > > >
> > > >void* PortOneFunc(void* arg) {
> > > >
> > > >CCommPort *x_oPort1 = (CCommPort*)arg;
> > > >
> > > >try {
> > > >   // Open Port with baudrate 4800
> > > >   if (x_oPort1->Open(RS_4800)) {
> > > >       	cout << "COM1 Opened" << endl;
> > > >	do {
> > > >	  // Get till terminating chars
> > > >	  string str = x_oPort1->GetLine().c_str();
> > > >myMutex.lock();				  // Append the data for
> further
> > > >analysis
> > > >	  data1->Append(str.c_str());
> > > >	  myMutex.unlock();
> > > >
> > > >	} while(true);
> > > >
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com

  reply	other threads:[~2003-10-20  4:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-18 15:09 jasvinder bajwa
2003-10-20  4:59 ` amit mishra [this message]
     [not found] <3F8EBDB9.9070706@callisto.canberra.edu.au>
2003-10-18  6:14 ` amit mishra
  -- strict thread matches above, loose matches on Subject: below --
2003-10-16  5:21 amit mishra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20031020045953.6560.qmail@web41001.mail.yahoo.com \
    --to=infoworldindia@yahoo.com \
    --cc=jasvinder_bajwa9@hotmail.com \
    --cc=pthreads-win32@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).