小编Joh*_*ica的帖子

运行外部进程的非阻塞线程

我创建了一个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)

java multithreading nonblocking

8
推荐指数
2
解决办法
7541
查看次数

如何打印std :: atomic <unsigned int>的值

std::atomic<unsigned int>在我的程序中使用.如何使用打印其值printf?因为如果我只是使用它不起作用%u.我知道我可以使用cout,但我的程序充满了printf电话,我不想替换它们.以前我使用的是unsigned int代替,std::atomic<unsigned int>所以我只是使用%u,因此打印工作正常.

c++ printing atomic

8
推荐指数
2
解决办法
8286
查看次数

系统级的整数和字符串比较

整数和字符串如何在较低级别进行比较?就像我们使用时一样

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 comparison integer

8
推荐指数
1
解决办法
8888
查看次数

Java字符串数字比较器

我有一个方法返回需要排序的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,然后排序.然而,这对我来说似乎有点困难.

有人可以帮忙吗?

java natural-sort

8
推荐指数
2
解决办法
2万
查看次数

无法从类型void*(classname::)()转换为类型void*(*)(void*)

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++ multithreading

8
推荐指数
2
解决办法
7231
查看次数

重构长切换语句

我在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)

等等

几乎所有情况都只调用一个方法,方法不在一个类中,它们分布在许多类中.所以问题是,我如何能够将这种转换重构为更优雅的方式?

.net c# refactoring switch-statement

8
推荐指数
3
解决办法
2770
查看次数

函数接口作为lambda来对集合进行排序?

我正在研究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)

java lambda java-8

8
推荐指数
1
解决办法
2127
查看次数

Docker 镜像层:`ADD file:&lt;some_hash&gt; in /` 是什么意思?

在 Docker Hub 镜像中有为每个镜像层运行的命令列表。这是一个 golang示例

一些应用程序还在GitHub 中提供了它们的Dockerfile。这是一个 golang示例

根据Docker Hub镜像层,ADD file:4b03b5f551e3fbdf47ec609712007327828f7530cc3455c43bbcdcaf449a75a9 in /是第一条命令。图像层没有包含任何“FROM”命令,它似乎也不足以满足ADD 定义

所以这里是问题:

  1. 是什么ADD file:<HASH> in /意思?这是什么格式?
  2. 有什么办法可以使用哈希向上追踪吗?我想哈希代表FROM图像,但似乎没有 API。
  3. 为什么不能使用ADD file:<HASH> in /语法构建 dockerfile ?有什么方法可以使用这种语法构建图像,或者在两种格式之间进行转换?

docker dockerhub dockerfile docker-image docker-container

8
推荐指数
1
解决办法
1617
查看次数

将拥有的数组分成拥有的两半

我想将一个拥有的数组分成两个拥有的一半\xe2\x80\x94两个单独的数组,而不是原始数组的切片。各自的大小是编译时间常数。有没有办法在不复制/克隆元素的情况下做到这一点?

\n
let 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);\n
Run Code Online (Sandbox Code Playgroud)\n

因为这相当于仅仅移动元素的所有权,所以我有一种预感,应该对此有一个零成本的抽象。我想知道我是否可以通过巧妙地使用transmute和来做这样的事情forget。但这些功能的文档中有很多可怕的警告。

\n

我的主要动机是在内存中的大型数组上进行操作,而不需要太多的内存副本。例如:

\n
let 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 = ...\n
Run Code Online (Sandbox Code Playgroud)\n

我知道实现上述模式的唯一方法是进行大量内存复制,这是多余的。

\n

arrays rust

8
推荐指数
2
解决办法
1460
查看次数

如何在 C 中正确使用“typedef”结构?

我在许多课程和示例中看到了许多不同的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)

由于某些原因,这是错误的,还是正确的,但它提供了这样定义的结构的有限功能?

c struct typedef declaration definition

8
推荐指数
2
解决办法
2万
查看次数