小编dso*_*ano的帖子

volatile是否意味着它是线程安全的

在Java中,当我们想要确保编译器不应该通过保留变量的本地副本来进行优化时,我们将变量设置为volatile.将变量用作volatile可确保线程不使用变量的本地副本,但它们将使用存储在主存储器中的变量.但是,这是否意味着volatile变量是线程安全的?另外,在原始类型的情况下,如果我们使用用户定义的对象,它有何不同?

java thread-safety compiler-optimization

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

使用 unnest 函数插入 - 跳过序列列中的数字

我试图在插入中使用“unnest”功能,
这样做时,序列会为每个插入跳过一个数字,
请帮我解决这个问题...

mydb=# \d tab1  
                         Table "public.tab1"  
 Column |  Type   |                     Modifiers                         
--------+---------+---------------------------------------------------  
 id     | integer | not null default nextval('tab1_id_seq'::regclass)  
 col1   | integer |   
 col2   | integer |   
Indexes:  
    "tab1_pkey" PRIMARY KEY, btree (id)  

mydb=# insert into tab1(id,col1,col2) values (nextval('tab1_id_seq'),1,unnest(array[4,5]));  
INSERT 0 2  
mydb=# select * from tab1;  
 id | col1 | col2   
----+------+------  
  1 |    1 |    4  
  2 |    1 |    5  
(2 rows)  

mydb=# insert into tab1(id,col1,col2) values (nextval('tab1_id_seq'),2,unnest(array[4,5]));  
INSERT 0 2  
mydb=# select * …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql function auto-increment

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

对象上的线程锁是否也确保锁定成员对象?

考虑下面我编写的用于测试非原始变量(myObject)的锁定的类.如果所有线程都在同一个对象实例上工作SynchronizationTest,我的问题是:

我理解如果thread1正在执行set(...)方法,那么任何其他线程(比如说thread2)都可以执行anotherSetWithSynchronized(...)或者anotherSetWithoutSynchronized(...).

  1. 如果thread1 SynchronizationTest在执行时锁定了对象set(...),是否意味着它已获取所有成员对象变量的锁定?就像在这种情况下myObject.如果没有,

  2. 如果thread1正在执行,那么thread2 set(...)可以并发执行anotherSetWithSynchronized(...)吗?

  3. 这两种方法都不能同时由线程执行吗?

  4. 这个设计错了吗?我需要明确地锁定myObjectsynchronized set(...)方法.像这样:

    public synchronized void set(MyValue myValue) {
        synchronized (myObject) {
            myObject.put(myValue);
        }
    } 
    
    Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public class SynchronizationTest {
  private MyObject myObject = new MyObject();

  public synchronized void set(MyValue myValue) {
    myObject.put(myValue);
  }

  public void anotherSetWithSynchronized(MyValue myValue) {
    synchronized (myObject) {
      myObject.put(myValue);
    }
  }

  public void anotherSetWithoutSynchronized(MyValue myValue) {
    myObject.put(myValue);
  } …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-safety

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

与变量的 PySerial 通信

我正在尝试通过 OS X 上的 Pyserial 与我的 Arduino 连接。我正在控制 LED 发送从 0 到 9 的数字。代码如下

import serial
arduino = serial.Serial('/dev/tty.usbserial', 9600)

arduino.write('5')
Run Code Online (Sandbox Code Playgroud)

工作得很好,但我试图将本例中的 5 作为可变变量,但类似于

arduino.write('%d') % 5
Run Code Online (Sandbox Code Playgroud)

不会工作。我不知道如何格式化输出等于工作示例的变量?

python serial-port arduino pyserial

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

如何制作反映逐步形式进展的jquery/css进度条?

我看到很多示例进度条显示进度条被填满.但是,我想知道我如何能够逐步反映形式的进展情况.在这里可以看到我想要的一个很好的例子.任何有用的代码或来自其他页面的示例/演示都会很好.

谢谢!

jquery progress

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

Linux下如何读取GPS数据?

之前用win7从com口读取GPS数据。从现在开始,我想在 Ubuntu 下读取数据,但相同的代码不起作用。这是我的代码:

import serial, sys, time, threading
from datetime import datetime, timedelta    

class MeasureModule():
    def __init__(self, port, baudrate, sync_time=0, sync_nr=0):
        self.port = port;
        self.baudrate = baudrate;

    def start(self):
        try:
            self.serial = serial.serial_for_url(self.port, self.baudrate, timeout=1)
        except AttributeError:            
            self.serial = serial.Serial(self.port, self.baudrate, timeout=1)
        start = time.clock()
        while(time.clock()-start<11):     
            data  = self.readline()        
            print(data)

        self.stop();                    

    def stop(self):
        self.serial.close()   

    def readline(self, timeout=1, endline='\n'):
        buff='';
        try:            
            tic = time.clock()
            ch = self.character(self.serial.read(1))

            # you can use if not ('\n' in buff) too if you don't like …
Run Code Online (Sandbox Code Playgroud)

python linux gps serial-port

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

读取C变量的串行输入

嗨,我正在尝试从C程序读取串行输入(来自Arduino).我可以使用将数据发送到Arduino

system("echo -n \"data\" > /dev/ttyUSB0");
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何从同一个Arduino输入到c程序中的字符串(将在程序中处理).我该怎么做呢?

c serial-port input arduino

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

当我用Python刷新串行缓冲区时,它会停止读取

我编写了一个Arduino来将数据串行发送到我的电脑.pySerial正在从串口中正确读取,但由于我总是希望获得最新的信息,我以为我可以使用flushInput()刷新输入缓冲区,但是当执行命令时,我再也无法读取连载.我尝试每次只刷一次51次(因为51是一个素数,我可以很容易地用计数器计数51次而不必重置它),这样Arduino就有足够的时间发送下一个数据包(运行在57600波特) ),但仍然无法正常工作.也就是说,我使用了一个变量来使用deadline()来存储读取行的长度,但是,一旦我达到51并且输入缓冲区被刷新,我总是得到0的读数,这意味着它不会读取任何内容.我已经阅读了pySerial的文档,但没有找到任何相关信息.flushInput()也会终止串行连接吗?非常感谢.

编辑:我正在运行Mac OS 10.7.5和Python 2.7.3

try:
    self.s = serial.Serial("/dev/tty.usbmodemfa131", 57600, timeout = 0)
    self.FlightLoopCB = self.FlightLoopCallback
    XPLMRegisterFlightLoopCallback(self, self.FlightLoopCB, self.interval, 0)
except serial.SerialException:
    self.s = None
    .
    .
    .

    self.length=0
    self.myline=self.s.readline()
    self.length=len(self.myline)
    print "Test: %i %i" % (self.length, self.j)
    if(self.length>=7):
        if(self.myline[0:2]=="R,"):
            if(self.j%51==0):
                self.s.flushInput()

            self.length=len(self.myline)
            self.myline=self.myline[2:6]
            self.myLineBytes=[0,0]

            self.myLineBytes[0]=unpack('>H', self.myline[0:2])
            self.myLineBytes[1]=unpack('>H', self.myline[2:4])
Run Code Online (Sandbox Code Playgroud)

python serial-port arduino pyserial

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

在Arduino上将int转换为两个字节

我正在高频采样,需要通过UART从我的Arduino传输10位ADC值.

默认情况下,它每个字符使用一个字节.因此,如果执行analogRead将产生值"612",它将通过UART"6"作为一个字节发送,"1"作为一个字节发送,"2"作为一个字节发送,并将行终止符作为最后一个字节发送.

鉴于我的采样率被这种通信截断,重要的是它尽可能高效和统一,所以我试图强制它使用两个字节来传输那些数据,无论数据实际是什么(通过默认情况下,它将使用三个字节来发送"23",四个字节用于发送"883",五个字节用于发送"1001").

目前,我正在做这样的事情,这是我发现的最好方法:

int a = 600; //Just an example
char high = (char)highByte(a);
char low = (char)lowByte(a);
Serial.print(high);
Serial.println(low);
Run Code Online (Sandbox Code Playgroud)

目前,无论值如何,它都使用三个字节(包括\n).有更有效的方法吗?

只需用类似的东西打印即可

Serial.print(foo, BIN);
Run Code Online (Sandbox Code Playgroud)

根本不起作用.它实际上每foo的二进制表示的每一位使用一个字节,这是非常愚蠢的.

c serial-port arduino char uart

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

通过串口发送时,无法将字节数组转换为字符串数组,反之亦然

我必须做以下事情

  1. 在包含4个字节的char数组的末尾以十六进制追加2个字节,因此结果为6个字节.

  2. 将上面的6字节字节数组转换为char数组,将其传递给函数crcresult.(该函数只接受char数组).

  3. 最后在6字节的末尾合并crc 2字节.

我已在单独的java类中测试了以下程序,并且它有效.

  public class CharBytetest
  {
    public static void main(String[] args) 
    {
      char charbuffer1[] = {0x01,0x05,0x00,0x03};
      byte[] bufferbyte1 = new String(charbuffer1).getBytes();// converts chararray  to byte array

      byte byte4 = (byte)0xFF;
      byte byte5 = (byte)0x00;

      byte[] bufferbytemerge1 = new byte[bufferbyte1.length+2];
      System.arraycopy(bufferbyte1, 0, bufferbytemerge1, 0, bufferbyte1.length);
      bufferbytemerge1[bufferbyte1.length]= byte4;
      bufferbytemerge1[bufferbyte1.length +1 ]= byte5;

      //bufferbytemerge1 contains 6 byte (charbuffer1 + byte4 + byte5 )
      String str = new String(bufferbytemerge1);

      //bufferbytemerge1  converted to char array
      char[] charbuffer2 = str.toCharArray();
      byte[] bufferbyte2 …
Run Code Online (Sandbox Code Playgroud)

java arrays binary serial-port bytearray

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