Non Ovelapped Serial I/O
-
HI all, I am working on Non Overlapped serial I/O application. I have only one thread to receive the data.For send i dont have any thread. I just call Write file when i need to send . My problem is, When I have my receive thread wait for an event using WaitCommEvent, it ties up the serial port. Then my sending function can't access the port with WriteFile. I knew waiting for a comm event would block the receiving thread but didn't expect that it would block use of the port. Any suggestions on how to do non-overlapped communication, where the send fucntion can write while the receive thread waits for a comm event?
Regards, Sunil Kumar
Try to open the port twice using
CreateFile
. Use one handle for writing and another for reading from the port.«_Superman_» I love work. It gives me something to do between weekends.
-
Try to open the port twice using
CreateFile
. Use one handle for writing and another for reading from the port.«_Superman_» I love work. It gives me something to do between weekends.
-
I dont think I can use CreateFile twice. It is unable to create the second time.The handle is getting some undefined value, when it is opened the second time.
Regards, Sunil Kumar
You should be able to open more than once if you specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags.
«_Superman_» I love work. It gives me something to do between weekends.
-
You should be able to open more than once if you specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags.
«_Superman_» I love work. It gives me something to do between weekends.
«_Superman_» wrote:
You should be able to open more than once if you specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags.
You cannot do that with a communication resource (
MSDN
[^])The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDisposition parameter must be OPEN_EXISTING, the dwShareMode parameter must be zero (exclusive access), and the hTemplateFile parameter must be NULL. Read, write, or read/write access can be specified, and the handle can be opened for overlapped I/O.
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
«_Superman_» wrote:
You should be able to open more than once if you specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags.
You cannot do that with a communication resource (
MSDN
[^])The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDisposition parameter must be OPEN_EXISTING, the dwShareMode parameter must be zero (exclusive access), and the hTemplateFile parameter must be NULL. Read, write, or read/write access can be specified, and the handle can be opened for overlapped I/O.
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
yeah, I am unable to open it twice even if I mention the shared attributes. There is no other option for non overlapped I/O, if I have to WriteFile, when my receive thread wait for an event using WaitCommEvent?
Regards, Sunil Kumar
As workaround, you may use the same thread for both I/O. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
As workaround, you may use the same thread for both I/O. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]Even If I have to send data in the same receive thread, I am unable to do as WaitCommEvent never returns. My code block is:
if (!SetCommMask( pc->hCommn, EV\_RXCHAR)) { //Error } for ( ; ; ) { if (WaitCommEvent(pc->hCommn, &dwCommEvent, NULL)) { do { if (ReadFile(pc->hCommn, &chRead, 1, &dwRead, NULL)) { // A byte has been read; process it. pc->CopyRx(chRead); } else { // An error occurred in the ReadFile call. break; } }while(dwRead); }
else
// Error in WaitCommEvent.
break;
}Where can I call my send fucntion in this thread, if I have some data to send. Please suggest.
Regards, Sunil Kumar
-
«_Superman_» wrote:
You should be able to open more than once if you specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags.
You cannot do that with a communication resource (
MSDN
[^])The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDisposition parameter must be OPEN_EXISTING, the dwShareMode parameter must be zero (exclusive access), and the hTemplateFile parameter must be NULL. Read, write, or read/write access can be specified, and the handle can be opened for overlapped I/O.
:)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]I was wondering if DuplicateHandle[^] will work.
«_Superman_» I love work. It gives me something to do between weekends.
-
HI all, I am working on Non Overlapped serial I/O application. I have only one thread to receive the data.For send i dont have any thread. I just call Write file when i need to send . My problem is, When I have my receive thread wait for an event using WaitCommEvent, it ties up the serial port. Then my sending function can't access the port with WriteFile. I knew waiting for a comm event would block the receiving thread but didn't expect that it would block use of the port. Any suggestions on how to do non-overlapped communication, where the send fucntion can write while the receive thread waits for a comm event?
Regards, Sunil Kumar
Have you read this?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
-
Have you read this?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
-
You should be able to open more than once if you specify the FILE_SHARE_READ and FILE_SHARE_WRITE flags.
«_Superman_» I love work. It gives me something to do between weekends.