JNIEXPORT void JNICALL Java_SomeClass_someMethod(JNIEnv* env, jobject obj, jintArray array) {
jsize size = (*env)->GetArrayLength(env, array);
jint* buffer = (*env)->GetIntArrayElements(env, array, NULL);
...
(*env)->ReleaseIntArrayElements(env, array, buffer, 0);
}
JNI_ABORT
стоит передавать в том случае, если нужны были данные из массива, но сам исходный массив изменять не надо. Если изменения в массиве нужно сохранить, то вместо JNI_ABORT
надо передать 0. import sched, time
s = sched.scheduler(time.time, time.sleep)
def f():
s.enter(5, 1, f) # Перезапуск через 5 секунд
print(time.time())
f()
s.run()
import threading
def f():
threading.Timer(5.0, f).start() # Перезапуск через 5 секунд
print("Hello!")
f()
import time
def f():
print("Hello!")
while True:
time.sleep(5)
f()
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<receiver android:name="NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkUtil {
public static final int TYPE_WIFI = 1;
public static final int TYPE_MOBILE = 2;
public static final int TYPE_NOT_CONNECTED = 0;
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null) {
if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
}
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = NetworkUtil.getConnectivityStatus(context);
if(status == NetworkUtil.TYPE_NOT_CONNECTED) {
// Действия при недоступности сети
}
else {
// Действия при доступности сети
}
}
}
import sys
from ruamel.std.pathlib import Path
from ruamel.yaml import YAML, version_info
yaml = YAML(typ='safe', pure=True)
yaml.default_flow_style = False
def my_compose_document(self):
self.parser.get_event()
node = self.compose_node(None, None)
self.parser.get_event()
return node
yaml.Composer.compose_document = my_compose_document
def yaml_include(loader, node):
y = loader.loader
yaml = YAML(typ=y.typ, pure=y.pure)
yaml.composer.anchors = loader.composer.anchors
return yaml.load(Path(node.value))
yaml.Constructor.add_constructor("!include", yaml_include)
data = yaml.load(Path('warehouse.yaml'))
yaml.dump(data, sys.stdout)
specific:
spec1:
<<: *obj1
spec2:
<<: *obj1
key1: 10
warehouse:
obj1: &obj1
key1: 1
key2: 2
specific: !include specific.yaml
JNIEXPORT jstring JNICALL Java_Test_saySomething(JNIEnv *env, jobject obj, jstring jStr) {
// Получаем указатель на массив символов String
const char *cStr = (*env)->GetStringUTFChars(env, jStr, NULL);
if (cStr == NULL) return NULL;
// Выводим полученное
printf("%s\n", cStr);
// Освобождаем выделенную под строку область памяти
(*env)->ReleaseStringUTFChars(env, jStr, cStr);
// Получаем новый массив символов от пользователя
char buf[128];
scanf("%s", buf);
// Преобразовываем массив символов в String
return (*env)->NewStringUTF(env, buf);
}