Closing and opening QSerialPort from another thread











up vote
-1
down vote

favorite












I am working on an application that requires communication with serial port. I am using the blocking mater example provided by QT.



The problem is, I need to be able to Close and Open the port as I have another program that needs to sometimes to connect to the same serial port.



In that example, the thread will always keep the serial port open. I tried added a bool as a member variable and a pair of public functions to make it stop and start..but it does not work...



I think the problem is when I call a public function of "MasterThread" from my GUI thread the variable is not getting updated.



The "MasterTrhead" class has a bool "m_quit"...but it does not have an example how to use it...



Here is the changes I made:



I added this two function into the body of the class:



void MasterThread::stopCommunication()
{
mFreeThePort = true;
}

void MasterThread::resumeCommunication()
{
mFreeThePort = false;
}


Then in the overrided "run()" function I have:



while (!m_quit) {

if(mFreeThePort) {
serial.close();
QThread::msleep(5);
continue;
}


So I have only added that mFreeThePort boolean and two functions to set it true or false...



But it never closes the serial port...I guess because of the while loop.



You can find the source code of the original example here for the HEADER and here for the BODY










share|improve this question


























    up vote
    -1
    down vote

    favorite












    I am working on an application that requires communication with serial port. I am using the blocking mater example provided by QT.



    The problem is, I need to be able to Close and Open the port as I have another program that needs to sometimes to connect to the same serial port.



    In that example, the thread will always keep the serial port open. I tried added a bool as a member variable and a pair of public functions to make it stop and start..but it does not work...



    I think the problem is when I call a public function of "MasterThread" from my GUI thread the variable is not getting updated.



    The "MasterTrhead" class has a bool "m_quit"...but it does not have an example how to use it...



    Here is the changes I made:



    I added this two function into the body of the class:



    void MasterThread::stopCommunication()
    {
    mFreeThePort = true;
    }

    void MasterThread::resumeCommunication()
    {
    mFreeThePort = false;
    }


    Then in the overrided "run()" function I have:



    while (!m_quit) {

    if(mFreeThePort) {
    serial.close();
    QThread::msleep(5);
    continue;
    }


    So I have only added that mFreeThePort boolean and two functions to set it true or false...



    But it never closes the serial port...I guess because of the while loop.



    You can find the source code of the original example here for the HEADER and here for the BODY










    share|improve this question
























      up vote
      -1
      down vote

      favorite









      up vote
      -1
      down vote

      favorite











      I am working on an application that requires communication with serial port. I am using the blocking mater example provided by QT.



      The problem is, I need to be able to Close and Open the port as I have another program that needs to sometimes to connect to the same serial port.



      In that example, the thread will always keep the serial port open. I tried added a bool as a member variable and a pair of public functions to make it stop and start..but it does not work...



      I think the problem is when I call a public function of "MasterThread" from my GUI thread the variable is not getting updated.



      The "MasterTrhead" class has a bool "m_quit"...but it does not have an example how to use it...



      Here is the changes I made:



      I added this two function into the body of the class:



      void MasterThread::stopCommunication()
      {
      mFreeThePort = true;
      }

      void MasterThread::resumeCommunication()
      {
      mFreeThePort = false;
      }


      Then in the overrided "run()" function I have:



      while (!m_quit) {

      if(mFreeThePort) {
      serial.close();
      QThread::msleep(5);
      continue;
      }


      So I have only added that mFreeThePort boolean and two functions to set it true or false...



      But it never closes the serial port...I guess because of the while loop.



      You can find the source code of the original example here for the HEADER and here for the BODY










      share|improve this question













      I am working on an application that requires communication with serial port. I am using the blocking mater example provided by QT.



      The problem is, I need to be able to Close and Open the port as I have another program that needs to sometimes to connect to the same serial port.



      In that example, the thread will always keep the serial port open. I tried added a bool as a member variable and a pair of public functions to make it stop and start..but it does not work...



      I think the problem is when I call a public function of "MasterThread" from my GUI thread the variable is not getting updated.



      The "MasterTrhead" class has a bool "m_quit"...but it does not have an example how to use it...



      Here is the changes I made:



      I added this two function into the body of the class:



      void MasterThread::stopCommunication()
      {
      mFreeThePort = true;
      }

      void MasterThread::resumeCommunication()
      {
      mFreeThePort = false;
      }


      Then in the overrided "run()" function I have:



      while (!m_quit) {

      if(mFreeThePort) {
      serial.close();
      QThread::msleep(5);
      continue;
      }


      So I have only added that mFreeThePort boolean and two functions to set it true or false...



      But it never closes the serial port...I guess because of the while loop.



      You can find the source code of the original example here for the HEADER and here for the BODY







      c++ multithreading qt qthread qtserialport






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 10 at 23:27









      DEKKER

      968




      968
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          The boolean variable access might be optimised by the compiler. But in any case, this doesn't look quite right for your use case.



          Since you have two application trying to access the same hardware concurrently, you should rather have some sort of "muxer" that you would connect both your applications to in order to share the serial port usage.



          By the way, why have you more than one application trying to access the same serial port at the same time ?






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244424%2fclosing-and-opening-qserialport-from-another-thread%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            The boolean variable access might be optimised by the compiler. But in any case, this doesn't look quite right for your use case.



            Since you have two application trying to access the same hardware concurrently, you should rather have some sort of "muxer" that you would connect both your applications to in order to share the serial port usage.



            By the way, why have you more than one application trying to access the same serial port at the same time ?






            share|improve this answer

























              up vote
              0
              down vote













              The boolean variable access might be optimised by the compiler. But in any case, this doesn't look quite right for your use case.



              Since you have two application trying to access the same hardware concurrently, you should rather have some sort of "muxer" that you would connect both your applications to in order to share the serial port usage.



              By the way, why have you more than one application trying to access the same serial port at the same time ?






              share|improve this answer























                up vote
                0
                down vote










                up vote
                0
                down vote









                The boolean variable access might be optimised by the compiler. But in any case, this doesn't look quite right for your use case.



                Since you have two application trying to access the same hardware concurrently, you should rather have some sort of "muxer" that you would connect both your applications to in order to share the serial port usage.



                By the way, why have you more than one application trying to access the same serial port at the same time ?






                share|improve this answer












                The boolean variable access might be optimised by the compiler. But in any case, this doesn't look quite right for your use case.



                Since you have two application trying to access the same hardware concurrently, you should rather have some sort of "muxer" that you would connect both your applications to in order to share the serial port usage.



                By the way, why have you more than one application trying to access the same serial port at the same time ?







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 11 at 22:32









                SGaist

                4941827




                4941827






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244424%2fclosing-and-opening-qserialport-from-another-thread%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Guess what letter conforming each word

                    Port of Spain

                    Run scheduled task as local user group (not BUILTIN)