- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ucontext 开发一个简单的、具有教育意义的绿色(合作)基于量子的线程示例。但我面临着问题。下面提供的示例非常容易理解,我将感谢您为我提供的任何帮助:
TestApp.java
:
public class TestApp extends UThreadApp {
public static void umain() {
System.out.println("umain");
}
}
UThreadApp.java
:
import java.io.*;
public class UThreadApp {
public static void main(String[] args) {
long kernel = newContext();
long umain = newUThread("TestApp", "umain");
swap(kernel, umain);
System.out.println("main");
}
native static long newContext();
native static void swap(long oldc, long newc);
native static long newUThread(String className, String method);
static {
System.loadLibrary("uthread");
}
}
UThreadApp.c
:
#include <stdlib.h>
#include <ucontext.h>
#include "UThreadApp.h"
typedef struct {
ucontext_t context;
unsigned char stack[SIGSTKSZ];
} *Context;
ucontext_t *kernelContext;
/*
* Class: UThreadApp
* Method: newContext
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_UThreadApp_newContext
(JNIEnv *env, jclass cls) {
kernelContext = malloc(sizeof(ucontext_t));
if (kernelContext == NULL)
RTError("newContext: malloc: couldn't allocate memory for kernelContext");
return (jlong) kernelContext;
}
/*
* Class: UThreadApp
* Method: swap
* Signature: (JJ)V
*/
JNIEXPORT void JNICALL Java_UThreadApp_swap
(JNIEnv *env, jclass cls, jlong oldc, jlong newc) {
if (swapcontext((ucontext_t *)oldc, (ucontext_t *)newc) == -1)
SysError("swap: swapcontext: couldn't switch context");
}
static JavaVM *jvm = NULL;
static void callback(jclass cls, jmethodID mid) {
if (jvm == NULL)
return;
JNIEnv *env = NULL;
jint res;
res = (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
if (res < 0)
RTError("Attach VM Thread failed");
/* JVM segfaults here */
(*env)->CallStaticVoidMethod(env, cls, mid);
//printf("umain\n");
(*jvm)->DetachCurrentThread(jvm);
}
typedef void (*uthread_func)();
/*
* Class: UThreadApp
* Method: newUThread
* Signature: (Ljava/lang/String;Ljava/lang/String;)J
*/
JNIEXPORT jlong JNICALL Java_UThreadApp_newUThread
(JNIEnv *env, jclass cls, jstring className, jstring method) {
/* find the current jvm */
(*env)->GetJavaVM(env, &jvm);
Context ctx = malloc(sizeof(*ctx));
if (getcontext((ucontext_t *)ctx) == -1)
RTError("newUThread: getcontext");
sigdelset(&ctx->context.uc_sigmask, SIGALRM);
ctx->context.uc_link = kernelContext;
ctx->context.uc_stack.ss_sp = ctx->stack;
ctx->context.uc_stack.ss_size = SIGSTKSZ;
const char *str;
str = (*env)->GetStringUTFChars(env, className, NULL);
if (str == NULL)
RTError("newUThread: className: GetStringUTFChars");
jclass kls = (*env)->FindClass(env, str);
if (kls == NULL)
RTError("newUThread: FindClass: class not found");
(*env)->ReleaseStringUTFChars(env, className, str);
str = (*env)->GetStringUTFChars(env, method, NULL);
if (str == NULL)
RTError("newUThread: method: GetStringUTFChars");
jmethodID mid = (*env)->GetStaticMethodID(env, kls, str, "()V");
if (mid == NULL) {
RTError("newUThread: GetStaticMethodID: method not found");
}
(*env)->ReleaseStringUTFChars(env, method, str);
/* make global references */
jclass gkls = (*env)->NewGlobalRef(env, kls);
jmethodID gmid = (*env)->NewGlobalRef(env, mid);
makecontext((ucontext_t *)ctx, (uthread_func)callback, 2, gkls, gmid);
return (jlong) ctx;
}
代码创建kernel
和main
上下文,并准备umain
方法作为新的用户线程。 swap
切换上下文、保存内核并运行 main。示例应打印:
umain
下一个
主要
但是在 (*env)->CallStaticVoidMethod(env, cls, mid)
执行 Java 回调时出现段错误。这种代码很容易用 C 语言编写,但是当我尝试用 Java 开发它时,我遇到了一些微妙的问题。
Apache 的 javaflow
不是一个选择,因为我发现开发具有时间量子的调度程序(使用 SIGALRM)非常困难。
有什么想法吗?
最佳答案
您不应该尝试将 jmethodID
设为全局引用。它是一个方法 ID,而不是引用。编译器应该提示这一点。尝试在模块中全局保留方法 ID。
关于Java 绿色线程通过 JNI 使用 UNIX ucontext 库。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11725706/
在此处下载源代码:http://www.eyeClaxton.com/download/delphi/ColorSwap.zip 是的,我想将“主要是蓝色”的内容转换为“主要是绿色”的内容。 我想获取
我正在处理红色、绿色、蓝色或黑色的小图像(想想 4 色卡组中的卡片等级)。什么是确定图像颜色的快速算法? 有关输入的示例集,请参阅 here ,除了图像可以缩放等,所以它们不会那么清晰。 最佳答案 这
我正在为我的 HTML 表单创建一个简单的 JS 验证。验证检查字段是否为空,在某些情况下检查两者,如果它们为空并输入 !numbers。此检查效果很好,但我还试图实现的是,如果 JS 检测到无效输入
我是 Mac OSx/Cocoa 开发新手。在创建我的第一个应用程序期间,我遇到了一些事情,其中之一就是用于缩放目的的绿色 + 按钮的问题。 我想知道是否可以动态设置应用程序窗口的缩放按钮的行为?
我正在尝试通过command line构建apk gradlew assemleDebug 但出现以下错误: Could not find tools.jar. Please check that C
我有这段代码可以生成一个可点击的框,只要单击鼠标,它就会通过在绿色阴影之间循环来改变颜色,从黑色 --> 绿色 --> 白色。我需要同样的事情发生,除了盒子不是逐渐变亮,而是从白色开始逐渐变暗。 va
我正在构建一个 ruby on rails 应用程序,并尝试启动我的 TDD。我在测试环境下安装了以下 gem。 turn <0.8.3 rspec-rails capybara guard-rs
我的程序读取形状列表,如果面积 > 1000 并且颜色字符串与绿色匹配,则打印形状。 下面的示例数据: 矩形,宽度,高度,颜色 - 圆、半径、颜色。 矩形 68.01 77.63 橙色 主类(clas
我有以下代码: from PIL import Image import numpy as np a = np.ones((512, 256, 3)).astype(int)*255 image =
我正在尝试学习 TDD 和单元测试概念,并且我看到了口头禅:“红色、绿色、重构”。我很好奇为什么要在测试通过后重构代码? 这对我来说毫无意义,因为如果测试通过了,那你为什么要弄乱代码?我还看到 TDD
首先,我必须解释一下,我知道如果您的应用程序支持 CallKit 并且用户从应用程序进入后台状态,就会出现这个绿色条,而这些都可以在我的 VOIP 应用程序中完美运行。 但我想实现类似 Whatsap
有没有办法轻松地将给定的十六进制颜色代码分配给更一般的类别(红色、绿色、蓝色、黄色、橙色、粉色、黑色、白色、灰色……)? 比如 #ffcc55 -> 橙色,#f0f0f0 -> 白色,... 编辑:甚
Parameterized Unit Testing当您有 X 单元测试 * Y 配置时非常棒。 我有 3 个单元测试,每个单元测试都必须在 5 个特定情况下运行。 我使用 xUnit.net 的 T
我想实现一个可以按颜色过滤图像的搜索。我的图像模型包含多达 10 个出现在该特定图像中的 UIColors,现在我想要一个过滤器,例如蓝色,绿色,红色,黄色。我如何检查(以指定的容差)该特定图像是否包
我使用的是OpenCV 2.4.1,需要检测视频流是否有任何噪音。噪声,例如如下所示的样本帧: 一种检测这些类型的噪声的简单,快捷的方法可能是。问题是这种噪声可能是间歇性的,不可预测的并且需要检测 最
这个问题在这里已经有了答案: UIColor colorWithRed:green:blue:alpha: always returns white unless one argument is
我希望使用非常明亮的金属色或荧光色来指定我的文本和 div 颜色。我还没有找到显示这些的任何标准。这些是否存在于颜色规范中,或者您能否向我推荐任何接近的尝试。谢谢。 最佳答案 Here's一个很好的荧
Matlab 将图像存储为 3 维数组。前两个维度对应上图轴上的数字。每个像素由图像三维中的三个条目表示。三层中的每一层都代表像素阵列中红色、绿色和蓝色的强度。我们可以通过以下方式提取出图像中独立的红
我有一个图像(列表列表),我想返回整个图像的平均颜色。我尝试使用 zip() 将图像按红、绿、蓝切成 3 部分,但是当我运行代码时: def average(image): """Return
为什么我在 SSL 锁定标志前看到一个带有 Twitter Inc 的绿色方 block ,但对于 Facebook 来说只是一个简单的锁定标志? 这些证书有什么区别?还是有其他原因? 最佳答案 绿色
我是一名优秀的程序员,十分优秀!