我的应用程序中有这个线程监视一组客户端套接字.我select()用来阻止,直到客户端发出请求,这样我就可以有效地处理它而不会增加线程.
现在,问题是,当我将新客户端添加到客户端列表时,我必须等待select()(设置为10秒)的超时以实际将新套接字添加到已侦听的套接字.
所以我想在超时之前进行select()破解,以便可以立即收听客户端.
我已经有了一个解决方案:创建一个我总是包含在我的侦听套接字列表中的虚拟套接字对,并且我在其中编写以进行select()破解,但我希望有更好的解决方案.
编辑:我无法访问,eventfd()因为我使用的GLIBc太旧了(我无意更新它).所以我可能不得不使用fifo或socket.
你知道任何?
谢谢!
我有一个问题,使用C++映射来存储指向基类和一些派生类的指针.
让我用一个相当长但很简单的代码来解释:
#include <map>
#include <iostream>
struct foo{ int dummy[4]; };
struct bar{ int additionnal[4]; };
class Base
{
private:
struct foo *_internal_structure;
public:
Base() { _internal_structure = new struct foo; }
~Base()
{
delete _internal_structure;
std::cout << "Base DTOR\n";
}
};
class Derived: public Base
{
private:
struct bar *_additional_structure;
public:
Derived() { _additional_structure = new struct bar; }
~Derived()
{
delete _additional_structure;
std::cout << "Derived DTOR\n";
}
};
int main(int argc, char *argv[])
{
std::map<int, Base*> my_map;
Base …Run Code Online (Sandbox Code Playgroud) 我正在开发一个嵌入式平台(架构是SH4),几分钟前我的程序用SIGABRT崩溃了.
幸运的是,我在gdbserver下运行,被这个信号中断的线程有这个堆栈转储:
#0 0x2a7f1678 in raise () from /home/[user]/target/lib/libc.so.6
#1 0x2a7f2a4c in abort () from /home/[user]/target/lib/libc.so.6
#2 0x2a81ade0 in __libc_message () from /home/[user]/target/lib/libc.so.6
#3 0x2a81f3a8 in malloc_printerr () from /home/[user]/target/lib/libc.so.6
#4 0x2a8c3700 in _IO_wide_data_2 () from /home/[user]/target/lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)
你知道这里发生了什么吗?一个糟糕的免费()?坏删除?不好malloc?什么是"_IO_wide_data_2"应该做什么?我看到malloc_printerr()调用我也不明白.
谷歌给了我234个结果,但所有这些都只是因为这些人在他们的回溯中有"功能".
在我必须理解的嵌入式代码中,有这一行代码:
*((void (**) ()) 0x01) = c_int01; /* Write the interrupt routine entry */
Run Code Online (Sandbox Code Playgroud)
我可以掌握使用函数指针设置中断向量这一事实c_int01,但我无法确定哪种类型的强制转换(void (**) ())引用.我知道标准函数指针表示法,(void (*)())但不知道另一个.
我试图重构代码,使它看起来更像这样:
// header
typedef void (*interrupt_handler)(); // prototype of an interruption handler
#define INTERRUPT_VECTOR 0x01
#define SET_INTERRUPT_HANDLER( handler ) *((interrupt_handler) INTERRUPT_VECTOR) = (handler)
// code
SET_INTERRUPT_HANDLER( c_int01 );
Run Code Online (Sandbox Code Playgroud)
但嵌入式编译器抱怨LHS不是一个对象.
有谁知道这个符号表示什么? (void (**)())
//编辑:
对于那些感兴趣的人,我会更好地理解这一点:
*( (void (*)())* 0x01) = c_int01;
Run Code Online (Sandbox Code Playgroud) 我有一个Map<String, List<String>>我想转换成a Map<String, String>,结果的值将是String.join(" - ", values)第一个map的值.
我知道如何这样做:
public Map<String,String> flatten( Map<String, List<String>> attributes) {
Map<String, String> map = new HashMap<>();
attributes.forEach((k,v) -> map.put( k, String.join(" - ", v)));
return map;
}
Run Code Online (Sandbox Code Playgroud)
但我想摆脱new HashMap<>()并直接对输入进行转换.
我怀疑,collect(Collectors.groupingBy( something ) )但我无法弄清楚如何.
我想要的是这样的:
public Map<String,String> flatten( Map<String, List<String>> attributes) {
return attributes.entrySet().stream().<something>;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
所以,我想知道在C中是否有一个好的标记可供选择,除了普通的0xDEADBEEF或不太吸引人的(对于正确的代码)0x0BADA550.
你最喜欢的是什么?有没有理由选择一个或另一个特定值?
我在 Jenkins 中的多分支项目工作正常,但我想将工作描述(默认情况下为“完整项目名称:xxxx/”)修改为更有意义的内容。
我可以使用执行currentBuildmy 时可用的变量轻松更改构建描述Jenkinfile,但我不知道如何修改父作业描述。
我的用例是,我的存储库的每个分支都有一个关联的容器,该容器在完成时使用最新版本进行更新。因此,我的多分支项目中的每个作业都有其容器和 Web URI,我想将其放入作业描述中。
这可能吗?
我想清理我的汇编代码并提供一种通过宏多次调用“NOP”的方法:
#define NOP() asm(" nop")
#define NOP_N( N ) \
NOP(); \
NOP(); \
.... call NOP() N times
Run Code Online (Sandbox Code Playgroud)
我无法确定这在宏中是否可行。
显然,出于性能原因,我不想要这样的东西:
#define NOP_N( n ) { register int i; for(i=0;i<n;i++) asm(" nop"); }
Run Code Online (Sandbox Code Playgroud)
这违背了 NOP 的目的:
L17: ; NOP_N(3);
nop
addi 1,r0 ; Unsigned
cmpi 3,r0
blo L17
Run Code Online (Sandbox Code Playgroud)
代码是C和汇编语言,所以这里不能涉及C++。此外,编译器相当陈旧,不支持可变参数宏......
这是我的意见:
var toto=[
[
{ "a": "24" },
{ "a": "23.9"},
{ "a": "NaN"},
{ "a": "3" }
],
[
{"b": "19"},
{"b": "20"},
{"b": "NaN"},
{"b": "3" }
],
[
{"c": "27"},
{"c": "28"},
{"c": "NaN"},
{"c": "3" }
]
];
Run Code Online (Sandbox Code Playgroud)
保证所有对象数组包含相同数量的对象.
我想在输出中获得:
var out = [
{ "a": "24", "b": "19", "c":"27" },
{ "a": "23.9", "b": "20", "c":"28"},
{ "a": "NaN", "b": "NaN", "c":"NaN"},
{ "a": "3", "b": "3", "c": "3"}
]
Run Code Online (Sandbox Code Playgroud)
也就是说,对于每个内部数组,取第N个元素并将其合并到一个对象中,然后将其推入结果数组中.
我有一个"braindead"解决方案,它在第一个子数组上迭代,然后在其他数组上迭代:
var out = …Run Code Online (Sandbox Code Playgroud) 我有这个类有很多类成员,还有很多不同的构造函数.
到目前为止,我在每个构造函数中使用了构造函数初始化列表,以我想要的方式调优每个成员.
这非常繁琐,因为每次我向我的类添加一个新成员时,我必须访问每个构造函数并更新初始化列表以向该成员添加默认值.
所以,我想我会添加一个方法来初始化我需要的值.问题!由于该方法在初始化列表之后执行,因此我在此初始化列表中放置的特定值将被我的方法覆盖.
快速例子:
class A
{
public:
A();
A( B b );
A( int i );
// A( .... ); plenty of them
private:
int member1, m2, m3,m4;
bool b1,b2, b3;
// ....
// every time I add a member I have to modify the initialization lists
// solution: agregate member initialization in a member function:
void init_members();
}
// init list constructors
A::A() : m1(false), m2(false), m3(false), m4(true) .... …Run Code Online (Sandbox Code Playgroud) 这个问题只是为了好玩.
我有这个方法:
private static String getBaseDomain(String fullDomain) {
// we take the base domain from the usual xxx.yyy.basedomain.tld: we
// want only the last 2 elements: basedomain.tld
List<String> elements = Arrays.asList(fullDomain.split("\\."));
if( elements.size() > 2){
elements = elements.subList(elements.size()-2, elements.size());
}
return String.join(".", elements);
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用java流API获得相同的结果(实际上,我想知道哪种方法是最节省资源的).
我无法想象如何仅从流中获取最后2个元素:limit(2)将给出前两个元素,并且skip(XXX)我不知道如何提取流"inline"的大小.
你能告诉我你会怎么做吗?
我是Java的新手,虽然我在C++和其他语言方面有很多经验.所以模板/泛型不是我不知道的.
有一些困扰我,虽然,这是这<?>是有人告诉我,我应该提前哪些特定类型的它会用,每次我用的东西一般情况下,当我不知道:
喜欢:
List< MyGeneric > foo; // bad
List< MyGeneric<?> > bar; // good
Run Code Online (Sandbox Code Playgroud)
使用第一个表达式时,IntelliJ不会对我进行barf,我不明白它为什么要这样做.我的同事已经表示第二个表达要好得多,但不能告诉我到底为什么.
我的意思是,这两者之间究竟有什么不同,除了第二部分明确表示它是我们操纵的通用事实?
编译器当然知道它在编译时是通用的,所以我的猜测是第二个表达式只是更好,因为它告诉程序员他正在操作泛型.
我对吗?
编辑:为了澄清,我滔滔不绝地使用最严格的类型,比如List<MyGeneric<Double>>,每当我事先知道我将要存储在那里时.我的问题是当我存储未知类型的泛型时.