Ниже приведен код, который я использую для связи с моим Arduino в Windows XP. Проблема, с которой я сталкиваюсь, заключается в том, что когда у меня есть две команды, пытающиеся получить доступ к порту одновременно, это оператор перехвата UnauthroizedAccessException, он выводит сообщение об ошибке и не выполняет ни одну из команд. Как я могу выполнить кодирование этого оператор catch, чтобы вместо того, чтобы перехватить ошибку или даже сделать ошибку, программа завершит выполнение первой команды, а затем выполнит другую, что-то вроде очереди ....
#include "stdafx.h"
#include <iostream>
using namespace System;
using namespace System::IO::Ports;
int main(int argc, char* argv[])
{
using namespace std;
String^ portName;
int baudRate=9600;
portName="COM4";
// arduino settings
SerialPort^ arduino;
arduino = gcnew SerialPort(portName, baudRate);
// open port
try
{
arduino->Open();
{
if(strcmp(argv[1],"-send")==0){
String^ command = gcnew String(reinterpret_cast<const char*>(argv[2]));
if(String::Compare(command,"int6")==0){
arduino->Write("^");
}else
arduino->Write(command);
}
if(strcmp(argv[1],"-get")==0){
String^ command = gcnew String(reinterpret_cast<const char*>(argv[2]));
arduino->ReadTimeout = 1000;
arduino->WriteLine(command);
String^ result = arduino->ReadLine();
Console::Write(result);
}
}
// close port to arduino
arduino->Close();
}
catch (IO::IOException^ e){
Console::Write("errormessagedisconnected");
}
catch (TimeoutException^ e){
Console::Write("errormessage");
}
catch (UnauthorizedAccessException^ e){
Console::Write("errormessage");
}
catch (ArgumentException^ e){
Console::WriteLine(e->GetType()->Name+": incorrect port name syntax, must start with COM/com");
}
// end program
return 0;
}