This is the mail archive of the pthreads-win32@sources.redhat.com mailing list for the pthreas-win32 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Threading Issue - Program hangs on Ctrl-C - URGENT PLZ


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]