我正在开发需要与许多串口通信的应用程序.我没有找到一种方法来做到这一点,而不使用每个端口的线程.有没有办法用单线程执行此操作?类似于多个端口上的select或poll一样?我正在使用pyserial 2.6
我想以每秒数千次的紧密循环来调用它.这是一个昂贵的电话吗?我使用的是Windows Visual C++.
我需要代表Volts,Ampers和Watts及其关系(例如W = V*I)..
这就是我的意思,但看起来真的很冗长.有关如何使其更简洁的任何想法?
#include <stdio.h>
#include <iostream>
template<class T>
class double_val {
public:
explicit double_val(double val):_val(val) { };
double_val(const T& other) {
_val = other._val;
}
T& operator=(const T &other) {
_val = other._val;
return *this;
}
T operator+ (const T& other) const {
return T(this->_val + other._val);
}
T operator+ (double val) const {
return T(this->_val + val);
}
T operator- (const T& other) const {
return T(this->_val - other._val);
}
T operator- (double val) const {
return …Run Code Online (Sandbox Code Playgroud) 我需要在不同进程的tcp套接字上发送内容.是否允许同时发送同一个套接字?如果没有,如何实现sychonization?
平台:windows 7 32bit,erlang R15B01.
我开发了一个erlang服务器,同时监听200个不同的TCP端口(200个gen_servers)
经过几分钟的中等负荷(几个并行的客户端)后,整个节点就完全冻结了 - 甚至外壳完全冻结了.
这个问题如何得到诊断?对于那些问题,是否有标准的erlang方法?(内存消耗低,所以它不是某种内存泄漏)
重要编辑
似乎在werl.exe下没有这样的问题.仅在erl.exe下.可能与http://erlang.2086793.n4.nabble.com/erl-exe-dies-but-werl-exe-does-not-on-both-Windows-XP-and-2008R2-with-R14B01-相同td3335030.html
下面是添加二进制字节的简单实现.根据eprof它很慢(大约占总时间的10% - 主要是因为许多电话binary:part/3).
怎样才能得到优化?
calc_checksum(Packet) when is_binary(Packet)->
calc_checksum(Packet, 0).
calc_checksum(<<>>, Acc) ->
Acc band 16#FFFF;
calc_checksum(Packet, Acc) when is_binary(Packet) ->
W = binary:decode_unsigned(binary:part(Packet, 0, 2), little),
NextAcc = Acc + W,
NextBytes = binary:part(Packet, byte_size(Packet), -(byte_size(Packet)-2)),
calc_checksum(NextBytes, NextAcc).
Run Code Online (Sandbox Code Playgroud) 我对constepxt ctors感到困惑.
以下是否同样快(或更快)
while(true)
{
constexpr std::chrono::hours one_hour(1);
..
}
Run Code Online (Sandbox Code Playgroud)
比(仅创建一个实例):
while(true)
{
static constexpr std::chrono::hours one_hour(1);
..
}
Run Code Online (Sandbox Code Playgroud)
换句话说,constexpr ctor是否意味着没有任何运行时开销?
在实施NIF时,Dialyzer给了我
函数crc16/1没有本地回报
可能是因为我在.erl模块中退出(就像官方文档推荐的那样):
-module(my_nifs).
-export([crc16/1]).
-on_load(init/0).
init() ->
ok = erlang:load_nif("../nifs/my_nifs", 0).
-spec crc16(_Binary :: binary()) -> non_neg_integer().
crc16(_Binary) ->
exit(nif_library_not_loaded).
...
Run Code Online (Sandbox Code Playgroud)
一般来说,似乎使用exit/1始终让Dialyzer抱怨这条消息(-spec .. -> no_return()没有帮助).
怎么解决这个问题?
我认为整个想法是只有NO状态的计算和没有副作用.现在,如果Clojure应用程序(或更糟糕的是,可重复使用的Clojure 库)可以使用和创建任何Java对象,我怎么能确定我没有副作用或状态?
对于我开发的某些特定应用程序,我不需要主管.可以不使用吗?
医生说到了这start/2一点
"应该返回{ok,Pid}或{ok,Pid,State},其中Pid是最高监督的pid"
所以我不确定是否可以不启动主管并返回一些无效的pid(我试过并且没有发生任何不好的事情)