내 C# 응용 프로그램은 백그라운드 작업자가 전송 된 데이터의 승인을 기다리는 데 사용됩니다. 여기에 몇 가지 사이비 코드는 내가 할 노력하고있어 시연 :BackgroundWorker를 사용하는 C#의 동시 스레드
UI_thread
{
TransmitData()
{
// load data for tx
// fire off TX background worker
}
RxSerialData()
{
// if received data is ack, set ack received flag
}
}
TX_thread
{
// transmit data
// set ack wait timeout
// fire off ACK background worker
// wait for ACK background worker to complete
// evaluate status of ACK background worker as completed, failed, etc.
}
ACK_thread
{
// wait for ack received flag to be set
}
무엇을 어떻게하면 ACK BackgroundWorker 구성 타임 아웃 및 승인이 수신되지 않습니다 것입니다. 그 장치가 전혀 변경되지 않았고 C# 응용 프로그램이 전송 중이기 때문에 그것이 원격 장치에 의해 전송되고 있음을 확신합니다. 비교 I는
DateTime dtThen = DateTime.Now();
DateTime dtNow;
TimeSpan stTime;
do
{
dtNow = DateTime.Now();
stTime = dtNow - dtThen;
}
while ((stTime.TotalMilliseconds < waitTimeoutVar) && (!bAckRxd));
후자는 매우 애큐 리트 대기 시간을 발생 ... 이에 ... (이 작동 될 때)이으로부터
for(i = 0; (i < waitTimeoutVar) && (!bAckRxd); i++)
{
System.Threading.Thread.Sleep(1);
}
을 상기 ACK 스레드 변경된 전자에게. 그러나, 나는 슬립 기능의 제거가 직렬 데이터를 수신하는 능력을 방해하는지 궁금합니다. C#은 한 번에 하나의 스레드 만 실행할 수 있습니다. 즉, 다른 스레드를 실행할 수 있도록 잠시 스레드를 잠자기 상태로 설정해야합니까?
생각이나 제안이 있으면 감사하겠습니다. Microsoft Visual C# 2008 Express Edition을 사용하고 있습니다. 감사.
감사합니다. Fyodor. 그 트릭을 할 것으로 보인다. 직렬 통신을 사용하고 있습니다. –
도움이 되니 기쁩니다. 천만에요. :-) –