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
c++ multithreading qt qthread qtserialport
add a comment |
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
c++ multithreading qt qthread qtserialport
add a comment |
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
c++ multithreading qt qthread qtserialport
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
c++ multithreading qt qthread qtserialport
asked Nov 10 at 23:27
DEKKER
968
968
add a comment |
add a comment |
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 ?
add a comment |
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 ?
add a comment |
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 ?
add a comment |
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 ?
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 ?
answered Nov 11 at 22:32
SGaist
4941827
4941827
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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