문제

Java 프로그램이 운영 체제가 잠을 자려고하는시기를 감지 할 수있는 방법이 있습니까?

실제 문제는 특정 응용 프로그램에서 여러 MySQL 데이터베이스 작업이 백그라운드에서 실행된다는 것입니다. Windows Machine에서 테스트 할 때 이러한 데이터베이스 트랜잭션은 수면/웨이크 업 사이클 후 중단되어 프로그램에서 수많은 오류 조건이 발생합니다. 이러한 오류는 일반적으로 다음과 같습니다.

java.net.SocketException
MESSAGE: Software caused connection abort: recv failed

우리가 '곧 잠들 것'이벤트에 반응 할 수 있다면, 우리는 문제를 선점하는 배경 운영을 일시 중지하려고 시도 할 수 있습니다. 우리가 'Just Woke Up'이벤트에 반응 할 수 있다면 덜 이상적으로 오류 메시지를 억제 할 수 있습니다.

도움이 되었습니까?

해결책

현재 시스템 시간을 이전 시스템 시간과 주기적으로 비교하여 웨이크 업을 감지 할 수 있습니다.

편집 : 다음은 기계가 잠을자는시기를 감지하는 데 도움이 될 수있는 예입니다.http://www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907

다른 팁

나는 그것이 당신이 찾고있는 것이 아니라는 것을 알고 있지만, 아마도 정답은 소켓이 반드시 유지 될 필요는 없다는 가정으로 코드를 작성하는 것입니다. 예를 들어 DB가 유지 보수를 위해 중단되거나 누군가가 이더넷 케이블을 넘어서서 연결이 중단 될 수있는 데는 많은 이유가 있습니다. 누군가 앱이 실행 중에 누군가 네트워크 케이블을 꺼내면 오류에 비슷한 문제가있을 것이라고 생각합니다.이 조건은 초기 조건이 아니므로 이러한 조건을 우아하게 시도하고 처리하는 것이 더 나은 접근 방식 일 것입니다.

JNI 또는 JNA로 OS에서 수면/웨이크 업 이벤트를 가두도록 할 수 있습니다.

에서 Windows Power Events (MSDN), WM_PowerBroadcast 이벤트를 받으려면 창 핸들러와 널 창을 만들어야합니다. 이 창 절차는 Java 코드의 이벤트 기능을 호출하여 메시지를 기포 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top