我创建了一个Java GUI应用程序,它可以作为许多低级外部进程的包装器.该实用程序按原样工作,但迫切需要一个重大改进.
我希望我的外部进程以非阻塞方式运行,这允许我并行地为其他请求提供服务.简而言之,我希望能够在生成数据时处理来自外部流程的数据.但似乎我检查并查看外部进程是否仍在运行的基本尝试是阻塞.
以下是我的ExternalProcess类的摘录.有关线程和阻止的特定Java功能问题,请参阅内联注释.
public void Execute()
{
System.out.println("Starting thread ...\n");
Runner = new Thread(this, "ExternalProcessTest");
Runner.run();
System.out.println("Ending thread ...\n");
}
public void run()
{
System.out.println("In run method ...\n"); // Debug purposes only.
// Show that we are in the run loop.
try
{
// Execute string command SomeCommand as background process ...
Process = Runtime.getRuntime().exec(SomeCommand);
while(IsRunning())
{
// External process generates file IO. I want to process these
// files inside this loop. For the purpose of this demo …Run Code Online (Sandbox Code Playgroud) 我std::atomic<unsigned int>在我的程序中使用.如何使用打印其值printf?因为如果我只是使用它不起作用%u.我知道我可以使用cout,但我的程序充满了printf电话,我不想替换它们.以前我使用的是unsigned int代替,std::atomic<unsigned int>所以我只是使用%u,因此打印工作正常.
整数和字符串如何在较低级别进行比较?就像我们使用时一样
int a = 11;
int b = 12;
compare(a,b); //Just an example comparison, not in any particular language.
Run Code Online (Sandbox Code Playgroud)
和
String a = "11";
String b = "12";
compare(a,b);
Run Code Online (Sandbox Code Playgroud)
现在我要问的是这两个比较之间的系统级差异是什么?问题不适用于任何特定语言,它只是一个普遍的问题.它也不是关于字符串到整数的转换/比较,反之亦然.我知道不同平台和不同语言的答案可能有所不同,但由于我对此没有任何线索,我只是问一个通用的问题.
为什么整数比较总是被认为比字符串比较更快?
我有一个方法返回需要排序的String列表.但是,我遇到了旧的字符串编号排序问题,并想知道是否有人可以协助比较器实现或指向我的方向.
该列表将返回一个列表:
State Lower Legislative District 1
State Lower Legislative District 11
State Lower Legislative District 12
...
State Lower Legislative District 2
...
State Lower Legislative District 100
...
State Upper Legislative District 1
State Upper Legislative District 11
...
Run Code Online (Sandbox Code Playgroud)
所以,首先我需要做一个基本的String排序,但是我需要按数字排序.要排序的数字应该总是跟踪,可能是2或3位数.
(编辑)我最初的想法是在空格上拆分字符串,在数字部分运行StringUtils.isNumeric,然后排序.然而,这对我来说似乎有点困难.
有人可以帮忙吗?
class Scoreget{
private:
//some variables
public:
Scoreget(){
//something here
}
void* basicgetscore(){
//somthing here
}
void getscore(Scoreget s){
pthread_t t;
if(pthread_create(&t,NULL,s.basicgetscore,NULL)==-1){
printf("Error 3\n");
exit(3);
}
void *a;
if(pthread_join(t,&a)==-1){
printf("Error \n);
exit(4);
}
}
};
Run Code Online (Sandbox Code Playgroud)
我试图运行一个单独的线程来调用一个函数,因为它使用execl()调用,因此将停止我的程序(我在Windows上,不能使用fork()).将线程与类结合起来给我带来了困难.
从一些谷歌搜索,我知道我需要制作最后一个功能的朋友或静态,并使用某种类型的指针.我试过了,但是碎片不合适.我甚至无法更改错误类型.现在让我很沮丧.得到同样的错误:
无法将Scoreget :: basicgetscore从void*(Scoreget ::)()类型转换为void*(*)(void*)
我在c#中编程,你通过口述命令控制,所以现在我有一个很长的switch语句.就像是
switch (command)
{
case "Show commands":
ProgramCommans.ShowAllCommands();
break;
case "Close window":
ControlCommands.CloseWindow();
break;
case "Switch window":
ControlCommands.SwitchWindow();
break;
}
Run Code Online (Sandbox Code Playgroud)
等等
几乎所有情况都只调用一个方法,方法不在一个类中,它们分布在许多类中.所以问题是,我如何能够将这种转换重构为更优雅的方式?
我正在研究lambda表达式,我正在努力研究如何使用java.util.function.Function对集合进行排序.有人可以帮助我,或者给我一些关于如何实现这一点的指示?
我有一本书POJO和一个将书籍存储在一个集合中的类.我试图使用Function接口的lambda表达式返回相同的集合但已排序.我可以使用Collections.sort()并以这种方式返回它,但我认为有一种方法可以使用Function接口.
public class BookTable {
private Map<Integer, Book> bookMap;
public BookTable() {
this.bookMap = new HashMap<>();
}
public void addBook(Book book) {
bookMap.put(size(), book);
}
public int size() {
return bookMap.size();
}
public List<Book> getRecord(int key) {
return Collections.singletonList(bookMap.get(key));
}
public List<Book> getRecordsWhere(Predicate<Book> predicate) {
return bookMap.values()
.stream()
.filter(predicate)
.collect(Collectors.toList());
}
public List<Book> getSortedRecords(Function<Book, Comparable> fieldExtractor) {
// Return sorted list....
}
}
Run Code Online (Sandbox Code Playgroud)
预订POJO
public class Book {
private String title;
private String author;
public String getTitle() {
return …Run Code Online (Sandbox Code Playgroud) 在 Docker Hub 镜像中有为每个镜像层运行的命令列表。这是一个 golang示例。
一些应用程序还在GitHub 中提供了它们的Dockerfile。这是一个 golang示例。
根据Docker Hub镜像层,ADD file:4b03b5f551e3fbdf47ec609712007327828f7530cc3455c43bbcdcaf449a75a9 in /是第一条命令。图像层没有包含任何“FROM”命令,它似乎也不足以满足ADD 定义。
所以这里是问题:
ADD file:<HASH> in /意思?这是什么格式?FROM图像,但似乎没有 API。ADD file:<HASH> in /语法构建 dockerfile ?有什么方法可以使用这种语法构建图像,或者在两种格式之间进行转换?我想将一个拥有的数组分成两个拥有的一半\xe2\x80\x94两个单独的数组,而不是原始数组的切片。各自的大小是编译时间常数。有没有办法在不复制/克隆元素的情况下做到这一点?
\nlet array: [u8; 4] = [0, 1, 2, 3];\n\nlet chunk_0: [u8; 2] = ???;\nlet chunk_1: [u8; 2] = ???;\n\nassert_eq!(\n [0, 1],\n chunk_0\n);\nassert_eq!(\n [2, 3],\n chunk_1\n);\nRun Code Online (Sandbox Code Playgroud)\n因为这相当于仅仅移动元素的所有权,所以我有一种预感,应该对此有一个零成本的抽象。我想知道我是否可以通过巧妙地使用transmute和来做这样的事情forget。但这些功能的文档中有很多可怕的警告。
我的主要动机是在内存中的大型数组上进行操作,而不需要太多的内存副本。例如:
\nlet raw = [0u8; 1024 * 1024];\n\nlet a = u128::from_be_array(???); // Take the first 16 bytes\nlet b = u64::from_le_array(???); // Take the next 8 bytes\nlet c = ...\nRun Code Online (Sandbox Code Playgroud)\n我知道实现上述模式的唯一方法是进行大量内存复制,这是多余的。
\n我在许多课程和示例中看到了许多不同的typedef用法C。
这是执行此操作的正确方法(来自ISO/IEC C 语言规范草案的示例)
typedef struct tnode TNODE;
struct tnode {
int count;
TNODE *left, *right;
};
TNODE s, *sp;
Run Code Online (Sandbox Code Playgroud)
但是我看到很多具有以下模式的代码:
typedef struct {
int a;
int b;
} ab_t;
Run Code Online (Sandbox Code Playgroud)
由于某些原因,这是错误的,还是正确的,但它提供了这样定义的结构的有限功能?
java ×3
c++ ×2
.net ×1
arrays ×1
atomic ×1
c ×1
c# ×1
comparison ×1
declaration ×1
definition ×1
docker ×1
docker-image ×1
dockerfile ×1
dockerhub ×1
integer ×1
java-8 ×1
lambda ×1
natural-sort ×1
nonblocking ×1
printing ×1
refactoring ×1
rust ×1
string ×1
struct ×1
typedef ×1