小编Rav*_*avi的帖子

pthread条件循环

我见过使用pthread_cond_wait的典型模式是:

pthread_mutex_lock(&lock);
  while (!test)
    pthread_cond_wait(&condition, &lock);
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

为什么不能使用if语句而不是while循环.

pthread_mutex_lock(&lock);
  if (!test)
    pthread_cond_wait(&condition, &lock);
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

c multithreading pthreads

2
推荐指数
1
解决办法
1701
查看次数

我如何在两个python脚本之间进行通信?

我有一个3d party python脚本,它从命令行获取输入.此脚本(input.py)中的相关代码如下所示:

import sys

def chooseinput():
    valid_inputs = ('a', 'b')
    inp = raw_input('Enter choice (%s): ' % "/".join(valid_inputs))
    if inp not in valid_inputs:
        sys.stderr.write("Unsupported input %s\n" % inp)
        return
    print 'You chose ' + '\'' + inp + '\''
    return inp

if __name__ == "__main__":
    chooseinput()
    # do something with the input...
    chooseinput()
    # do something with the input...
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写另一个python脚本(harness.py)来生成上述脚本的输入.

import subprocess

def harness():
    p = subprocess.Popen(['python', 'input.py'], stdin=subprocess.PIPE)
    p.stdin.write('a')
    p.stdin.write('b')

if __name__ == '__main__':
    harness()
Run Code Online (Sandbox Code Playgroud)

从命令行,我运行:

$ python …
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
7434
查看次数

无法在Android JellyBean上构建hello world内核模块

我正在尝试在Android JellyBean上构建一个简单的内核模块.

码:

#include <linux/module.h>  /* Needed by all modules */
#include <linux/kernel.h>  /* Needed for KERN_ALERT */

MODULE_LICENSE("GPL");
MODULE_AUTHOR("test");
MODULE_DESCRIPTION("Android ko test");

int init_module(void)
{
   printk(KERN_ALERT, "Hello world\n");

   // A non 0 return means init_module failed; module can't be loaded.
   return 0;
}

void cleanup_module(void)
{
  printk(KERN_ALERT "Goodbye world 1.\n");
}
Run Code Online (Sandbox Code Playgroud)

Makefile文件:

obj-m +=hello.o

KERNELDIR ?= ~/android/kernel
PWD := $(shell pwd)
CROSS_COMPILE=~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
ARCH=arm

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)

输出:

make …
Run Code Online (Sandbox Code Playgroud)

linux android android-4.2-jelly-bean

2
推荐指数
1
解决办法
6700
查看次数

React useState hook - 更新状态时何时使用先前的状态?

在下面的代码中,除非我将先前的状态传递给状态设置调用(“setForm”),否则表单不会正确更新。

要查看它的实际效果,请按原样运行代码,控制台将打印“true”,表明它有效。那是使用“validate1”函数。如果将其替换为“validate2”(不使用以前的状态),则无法打印“true”。

看起来在 validate2 中,由于这些调用的异步性质,第二个 setForm 调用会覆盖第一个 setForm 调用的 form.long 状态。但为什么 validate1 可以工作呢?为什么使用以前的状态会导致它起作用?任何有关此行为的文档都会非常有帮助。

(我可以通过使用一个设置两个字段的 setForm 来使 validate2 工作,但下面的代码旨在显示调用 setForm 的两种方式(有或没有先前状态)的差异。)

代码沙盒

const {useState, useEffect} = React;


function LoginForm() {
  const [form, setForm] = useState({
    username: "",
    password: "",
    long: null
  });

  useEffect(() => {
    console.log(form.long);
  }, [form.long]);

  const validate1 = (e) => {
    e.preventDefault();
    setForm((prevState) => ({
      ...prevState,
      long: form.password.length >=3 ? true : false
    }));
    setForm((prevState) => ({
      ...prevState,
      username: "*****"
    }));
  };

  const validate2 = (e) => { …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks

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