[Qt-interest] bloody ungraspable control of my pusbutton
Roland Tollenaar
rwatollenaar at gmail.com
Tue Feb 9 16:02:41 CET 2010
connect to a function:
OnApplicationFinish(),
then in that something like:
cout<<"Waiting for threads to stop...."<<flush;
while((EnquiryTWThreadRefresh->isRunning())||(ProductTWThreadRefresh->isRunning())){
Sleep(10);
}
cout<<"done."<<endl;
is what I do.
HTH.
Roland
S. Aguinaga wrote:
> Hello!
>
> Got audio working off a second thread and I am able to 'stop' it while
> it isRunning(),
> but am I halting it gracefully, and what do I have to do to quit the app
> while thread is running?
> A pushbutton is used to start the audio thread, then it is pressed
> again to Stop it.
>
> connect(newstartButton, SIGNAL(clicked()), this,
> SLOT(startAudioThread()));
> connect(quitButton , SIGNAL(clicked()), qApp, SLOT(quit())); // This
> doesn't work cleanly
>
>
> The slot: I use t_stop bool flag to check if the button was pressed to
> stop the the thread.
> If the thread is started, I change the txt of the button to read "Stop
> Thread"
>
> void AudKeyWidget::startAudioThread()
> {
> if (t_stop) {
> printf("Thread is running\n");
> stopAudio();
> }
> else {
> thread = new cAudioThread(this);
> thread->start();
> t_stop = !t_stop;
> if(t_stop)
> newstartButton->setText("Stop Thread");
> }
> }
>
> If we are stopping the thread, then I handle this using function
> stopAudio().
>
> void AudKeyWidget::stopAudio()
> { printf("Stop Audio\n");
> if (t_stop && thread->isRunning()) {
> thread->terminate();
> delete thread;
> t_stop = !t_stop;
> }
> }
>
>
> But using terminate() offers the proper way to halt the thread? & reset
> things?
> now my Continuous audio thread (caudiothread), some of this code was
> taken from the
> mandelbrot example.
>
> cAudioThread::cAudioThread(QObject *parent)
> : QThread(parent)
> {
> printf("-- cAudioThread(QObject *parent) : QThead(parent) ...\n");
> restart = false;
> abort = false;
>
> }
>
> cAudioThread::~cAudioThread()
> {
> mutex.lock();
> abort = true;
> condition.wakeOne();
> mutex.unlock();
>
> wait(); // Does is make sense to use this if we will almost
> // always halt the thread rather wait for it to end?
>
> }
> void cAudioThread::run()
> {
> printf("-- Independent thread, run() function started\n");
> forever {
> // ++++++++++++++++++ continuous audio (tone) ++++++++++++++++++ //
> blah, blah, blah
> // --------------------------- end continuous audio
> mutex.lock();
> if (!restart)
> condition.wait(&mutex);
> restart = false;
> mutex.unlock();
> }// ends forever
>
> }
>
>
> Finally the caudiothread.h, I would be interested in how to quit while
> running and if stopAudio offers a clean approach to halt the thread.
>
> class cAudioThread : public QThread
>
> {
>
> Q_OBJECT
>
>
> public:
>
> cAudioThread(QObject *parent = 0);
>
> ~cAudioThread();
>
>
> void playAudio( int );
>
>
> protected:
>
> void run();
>
>
> private:
>
>
> QMutex mutex;
>
> QWaitCondition condition;
>
> bool restart;
>
> bool abort;
>
>
> };
>
>
>
> // Salvador Aguinaga
>
> // Northwestern Univeristy
>
>
> ------------------------------------------------------------------------
> *From:* S. Aguinaga <sa_jr at yahoo.com>
> *To:* Qt Interest <Qt-interest at trolltech.com>
> *Sent:* Tue, February 2, 2010 7:15:52 AM
> *Subject:* Re: [Qt-interest] bloody ungraspable control of my pusbutton
>
> Thank you Ross, Amulya, and Jeroen for your responses and suggestions.
> I will work on this and report back and post my solution ( for others ).
>
> // Sal
>
> ------------------------------------------------------------------------
> *From:* S. Aguinaga <sa_jr at yahoo.com>
> *To:* Qt Interest <Qt-interest at trolltech.com>
> *Sent:* Mon, February 1, 2010 10:31:04 PM
> *Subject:* Re: [Qt-interest] bloody ungraspable control of my pusbutton
>
> I left out that that my application is a linux application an I am running
> qt 4.6
>
> The audio access is based on alsa, I'm wondering why this method becomes
> so strong and focused that even trying to quit the app does not responds.
> Does this pieces of code need an interrupt of some type? What other
> instances
> cause such a similar behavior?
>
> I'm sure that there is some method that can address this issue. If you
> want me
> to post the entire qt code, I can.
>
> Thanks in advance.
>
> // Sal
>
> ------------------------------------------------------------------------
> *From:* S. Aguinaga <sa_jr at yahoo.com>
> *To:* Qt Interest <Qt-interest at trolltech.com>
> *Sent:* Mon, February 1, 2010 10:21:56 PM
> *Subject:* bloody ungraspable control of my pusbutton
>
> Dear Fellows,
>
> I have a question for the best of you.
>
> I have a button that initiates a tone stimulus using my audio device.
> This stimulus is meant to be continuous until the pushbutton is toggled,
> but what is happening is that once my code goes into the audio loop it
> never allows control back to my pushbutton, in other words, I can't
> toggle it
> and right now the only way out is to go to the terminal and do control-C.
>
> here is the loop:
>
> while ( contToneButton->isChecked() ) {
> chk_msg();
> c = (int) floor((1 + oct0) * ncue / 2);
> cue(c);
> (void) ar_io_cur_seg(dvid);
> };
>
> have any of you come across something like this an do you mind sharing
> your methods?
>
>
> Thank you
>
> // Sal Aguinaga
> // Northwestern University
>
>
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list