2016-12-01 11 views
1

GLib's main loopg_timemout_source_new 및 관련 기능을 사용하여 주기적으로 콜백 기능을 예약 할 수 있습니다. 콜백은 예약 된 간격 후에 false을 반환 할 때까지 반복적으로 호출됩니다.JavaScript로 동적 재조정 GSource 만들기

이제이 프로세스를 동적 간격으로 수정하려고합니다. 그냥 true 또는 false 대신에 콜백은 다음 번 호출까지 경과해야하는 시간 값을 반환 할 수 있어야합니다.

C에서이 작업을 수행하는 것은 매우 간단합니다. dispatch function의 시간 초과 원본과 만 다른 새로운 GSource 형식을 만들 수 있으며 반환 값은 when setting the next expiration입니다.

불행히도 GNOME 셸 확장을 프로그래밍 중이므로 JavaScript가 붙어 있습니다. 위의 전략을 JavaScript로 포팅하는 주 요점은 the g_source_new function, new GLib.Source과 같습니다. 먼저 C에서 sizeof 연산자에 의해 계산되는 struct 유형의 길이를 초기화해야합니다. 자바 스크립트에서이 값을 얻는 방법을 모르겠습니다. 또한 디스패치 기능을 유지하는 데 필요한이 생성자의 두 번째 인수 인 a GSourceFuncs Struct의 생성을 시도하는 것은 오류입니다.

gjs> new imports.gi.GLib.SourceFuncs() 
Error: Unable to construct struct type SourceFuncs since it has no default constructor and cannot be allocated directly 

어떻게 JavaScript로 새 GSource를 만들 수 있습니까?

+0

기존 소스 유형 또는 [이진 구성 요소 포함]과 관련된 다른 솔루션에 대해서도 열려 있습니다. http : //stackoverflow.com/questions/40919457/including-binary-components-in-a-gnome-shell-extension). – XZS

답변

0

g_source_new()은 실제로 언어 바인딩 용으로 설계되지 않았으므로 JS 또는 Python 용 바인딩을 생성 할 때 건너 뛸 수 있도록 표시되어야합니다.

다른 질문에서 제안하는 것처럼 GObject 내성 검사를 통해 액세스되는 나만의 개인 C 라이브러리를 포함하여 앱에서 일반적으로 수행하는 작업입니다. 그러나, 나는 당신이 셸 확장을 위해 그것을 할 수 있는지 전혀 모른다.

JS에서 원하는 것을 구현할 수 있어야합니다. 다음은 메모리에서 작성한 간단한 예입니다. 원하는대로 할 수있는 것처럼 보입니다.