스레딩 내가 가진 가정합니다. 다음에 일어날 일 : 처리가 완료되고 다른 이벤트가 시작되거나 새로운 이벤트가 즉시 실행되지만 새 스레드에서 시작됩니까?이벤트 및
이벤트 및
답변
당신은 추측해서는 안됩니다. 유형 (ethernet_adapter
개체)에 의해 이벤트가 발생하는 방식에 따라 달라질 수 있습니다.
동기 동작 인 경우 현재 작업이 진행될 때까지 새 이벤트가 발생하지 않습니다.
비동기 작업 인 경우 새 이벤트가 즉시 발생합니다. (당신의 예에서와 같이)
protected virtual void OnPacketArrived(PacketArrivedEventArgs e)
{
EventHandler<PacketArrivedEventArgs> handler = this.PacketArrived;
if (handler != null)
{
handler(this, e);
}
}
너무 오래 처리 동기 가입자 모든 가입자에 걸쳐 내부 열거를 차단하는 것입니다 :
이것은 동기 작업입니다. 다른 스레드에서 발생하는 유일한 방법은 이벤트를 발생시키는 개체가 다른 스레드에서 수행하는지 또는 처리기에서 수행하는지 여부입니다. 이를 수행하는 방법은 여러 가지가 있지만 일반적으로 System.Threading.Tasks.Task
을 사용하면 .NET 4를 사용하는 것이 좋습니다.
응용 프로그램을 어떻게 동작 시킬지주의 깊게 고려하십시오. 새 스레드에서 각 패킷을 처리하기 만하면 패킷이 잘못된 순서로 처리 될 수 있습니다. 이들을 큐에 넣고 그 시점에서 배경 스레드로 처리하도록 할 수 있습니다. 또는 아무것도하지 않아도됩니다.
다음과 같이 ThreadPool에서 전체 작업을 큐에 넣을 수 있습니다.
ethernet_adapter.PacketArrived += (s, e) =>
{
ThreadPool.QueueUserWorkItem("long processing item");
};
또는 당신은 모든 스레드에 대한 작업을 (.NET 4.0) 만들 수 있습니다.
은 아마 당신의 ethernet_adapter
클래스의 방법이있다. 그러나! 매번 다른 스레드에서 ethernet_adapter
을 호출 할 경우 이후의 호출을 OnPacketArrived
으로 차단할 수 없으므로 동시에 두 개의 긴 처리가 수행됩니다.
예를 들어, Socket
구현을 살펴보십시오. 비동기 메소드는 완료 콜백이 IOCP 스레드에서 호출되도록합니다 (IO ThreadPool
에있는 모든 시간마다).
- 1. 자바 이벤트 및 이벤트 리스너
- 2. VB에서 이벤트 및 이벤트 처리
- 3. 마우스 이벤트 및 동작 이벤트
- 4. dll에서 이벤트 만들기 및 양식에서 이벤트 처리
- 5. 각도 2 이벤트 처리 및 맞춤 이벤트
- 6. 서버 보낸 이벤트 및 이벤트 ID
- 7. 이벤트 처리 jQuery unclick() 및 unbind() 이벤트?
- 8. 활성화 된 이벤트 및 비활성화 된 이벤트
- 9. 이벤트 캡처, 이벤트 버블 링 및 jQuery.on()
- 10. 이벤트 집중 및 흐림 이벤트 리 타겟팅
- 11. 이벤트 소싱 및 이벤트/누계 버전
- 12. 마우스 이벤트 및 키보드 이벤트 잡는 방법
- 13. Click 이벤트 및 끌기 이벤트 사용
- 14. GWT : 이벤트 및 이벤트 처리기 클래스를 작성합니까?
- 15. 이벤트 소싱 재생 이벤트 및 초기 값
- 16. 겉보기 중복 이벤트 및 이벤트 핸들러
- 17. 이벤트 버블 링 및 onblur 이벤트
- 18. NodeJS 이벤트 루프 및 이벤트 수신
- 19. 이벤트 일정 잡기 및 이벤트 자정 교차
- 20. Load 이벤트, Activate 이벤트 및 Form에 이벤트 입력 간의 차이점
- 21. MVP 발표자 및 이벤트
- 22. 스레드, 이벤트 및 GUI
- 23. 흐림 결합 및 이벤트
- 24. NSThread 및 이벤트
- 25. jQuery 및 mouseover 이벤트
- 26. IoC 및 이벤트
- 27. 이벤트 집계 및 컬렉션
- 28. 이벤트 .on 및 .off
- 29. SerialPort.Close() 및 이벤트 처리기
- 30. 스레드 및 이벤트
어떤 종류의 객체가'ethernet_adapter'입니까? –
@JimMischel 제 3 자 라이브러리 유형 'ICaptureDevice'입니다. 나는 대답을 얻은 것 같아. – ren