如何在成员函数上运行std :: async调用?
例:
class Person{
public:
void sum(int i){
cout << i << endl;
}
};
int main(int argc, char **argv) {
Person person;
async(&Person::sum,&person,4);
}
Run Code Online (Sandbox Code Playgroud)
我想调用sum async.
Person p;
call async to p.sum(xxx)
Run Code Online (Sandbox Code Playgroud)
我没弄明白我是否能用std :: async做到这一点.不想使用提升.寻找一线异步呼叫方式.
void log(){
time_t current = time(0);
tm *ptm = localtime(¤t);
stuf...
}
Run Code Online (Sandbox Code Playgroud)
只是想确定 - 我需要在方法结束时释放tm指针分配的内存吗?
如果我在链接器/库下设置库或将它们设置在"路径和符号"下,我很困惑.我认为他们是一样的.我对么?
我的问题的任何方式 - 我需要链接静态库,所以我尝试了几件事:
首先尝试我尝试在链接库中添加gtest(这是库)和gtest路径.以这种方式编译和链接正确,但在运行时失败,因为当它试图加载共享库(我想要静态库!)错误是
加载共享库时出错:libgtest.so.0
第二次尝试 - 我尝试在路径和符号中定义它添加到库的完整路径'/root/workspace/gmock/gtest/lib/.lib/libgtest.a'.在这种情况下,我在链接中出错:
g++ -L/root/workspace/gmock/lib/.libs -L/root/workspace/gmock/gtest/lib/.libs -o "playground" ./src/p.o ./src/playground.o -lpthread -l/root/workspace/gmock/gtest/lib/.lib/libgtest.a -l/root/workspace/gmock/lib/.lib/libgmock.a
/usr/bin/ld: cannot find -l/root/workspace/gmock/gtest/lib/.lib/libgtest.a
Run Code Online (Sandbox Code Playgroud)
这个帖子 dosnt给出了答案,并没有解释你如何定义与静态vs共享的不同链接.
谢谢
我的应用程序是地理应用程序.由于需要较短的响应时间,我的每个实例都会将所有点加载到内存中并将它们存储在结构中(四叉树).
每分钟我们加载所有点(与db同步)并将它们放在几个四叉树中.
我们现在有0.5GB积分.我正在努力准备下一级5GB积分.JVM:-XX:NewSize = 6g -Xms20g -Xmx20g -XX:+ UseConcMarkSweepGC -verboseGC -XX:+ PrintGCTimeStamps -XX:+ PrintGCDateStamps -XX:+ PrintGCDetails
实例的启动花费了很多次,因为GC在额外的应用程序中一直受到GC的影响.
我想对大堆的GC有一些参考.
我可以想到几个解决方案:
仅刷新数据库中的更改,而不是每次都加载所有数据库.缺点 - 在应用的早期阶段仍然会遭受GC,长时间GC.
关堆解决方案.在四元树中存储点ids并将点存储在堆外.缺点 - 序列化时间,地理结构是少数对象的复杂而不是简单的对象.
对于每个实例,使用针对此实例的结构和查询创建其他实例.geo实例将保存长寿命对象,并且可以对长寿命对象进行GC调整.缺点 - 复杂性和响应时间.
对于持有少量GIG长寿命对象的应用程序的文章的任何引用都将受到欢迎.
在Ubuntu(亚马逊)上运行.Java 7.Dosnt有内存限制.
问题是每次刷新数据时都会有很长的暂停时间.

用于刷新的Gc日志:
2014-06-15T16:32:58.551+0000: 1037.469: [GC2014-06-15T16:32:58.551+0000: 1037.469: [ParNew: 5325855K->259203K(5662336K), 0.0549830 secs] 16711893K->11645244K(20342400K), 0.0551490 secs] [Times: user=0.71 sys=0.00, real=0.05 secs]
2014-06-15T16:33:02.383+0000: 1041.302: [GC2014-06-15T16:33:02.383+0000: 1041.302: [ParNew: 5292419K->470768K(5662336K), 0.0851740 secs] 16678460K->11856811K(20342400K), 0.0853260 secs] [Times: user=1.09 sys=0.00, real=0.09 secs]
2014-06-15T16:33:06.114+0000: 1045.033: [GC2014-06-15T16:33:06.114+0000: 1045.033: [ParNew: 5503984K->629120K(5662336K), 1.5475170 secs] 16890027K->12193877K(20342400K), 1.5476760 secs] [Times: …Run Code Online (Sandbox Code Playgroud) 在Ubuntu上运行.程序是用C++编写的.我有2个进程在不同的主机上运行,当一个是master而一个是slave(它们之间没有任何优先级,只有一个句柄请求.).只有一个进程可以是主进程和处理请求.两个进程总是向上,如果它们崩溃,有一个看门狗重新启动它们.
主机通过网线连接.
我的计划是要求从一个到另一个保持活着,并且如果奴隶停止从主人那里保持活着,则需要将其状态改为主人.当master再次启动时,它首先等待保持活动状态,以防万一将其设置为master.如果让它设置为奴隶角色.
我很乐意得到您的意见:
如何防止两者同时掌握?这是我的主要关注点.启动和连接失败时,如何同时防止2个主站?
你认为查询保持活着还是保持活着会更好吗?(对于我来说,要求保持活力比推动更好)
任何其他好的建议和陷阱都将受到欢迎.
我按照 toctrl 解释 (http://www.thesprawl.org/research/tor-control-protocol/) 关于如何创建真正快速的单跳电路,我成功创建了一个电路,但我没有成功使用 firefox执行此操作后使用 tor。
我也尝试在“tor汽车电路项目”中使用,但我从tor那里得到错误,他无法连接到节点(每次不同的节点),所以他放弃了。
我也尝试下载 Tortunnel 项目,但我没有成功编译它。
有没有人有这方面的经验?
谢谢
cpp的新手(Java专家)。
我有具有方法sendMail(txt)的第三方库。我不想测试图书馆。我想测试自己的方法,因此,为了做到这一点,我需要模拟库调用。
我自己的方法如下所示:
#include "mailsender.h"
int run(txt){
analysis(txt);
...
...
int status = sendMail(txt);//sendMail is a 3rd party library call. i need to mock it.its not part of the unit test
return status;
}
Run Code Online (Sandbox Code Playgroud)
在Java中,mailsender是接口,并且已注入到我的类中,因此在进行测试的情况下,我将注入模拟。在cpp中模拟库调用的良好实践是什么?我可以将第3方库调用包装在一个类中并注入该类,但是我正在寻找更简单且更常见的方法(也许是ifndf)。
我对googlemock很熟悉。googlemock允许我模拟类。我不知道如何在我测试的方法中模拟呼叫。
在Ubuntu上运行c ++.我用这种方式打开socket:
socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW))
Run Code Online (Sandbox Code Playgroud)
在使用结束时我需要做什么?只要程序运行,就会使用一些套接字,我需要检查一下吗?看看socket是否仍然存在?
我知道这听起来很奇怪.printf不应该改变任何东西,但没有它sendTo失败. 该程序是从c代码复制的,并由ubuntux86上的cpp编译器编译. 我有一个发送arp请求的程序.没有这个printf,sendTo失败了.奇怪的是,我做了一个最小的程序,根本不在printf变量中使用(仅在printf中),并且printf工作,没有printf它不起作用(在sendTo上获得无效的参数错误).
附件是一个最小版本,仅用于显示问题:
这个sendTo失败了:
int retVal = sendto(arp_fd, &pkt, sizeof(pkt), 0, (struct sockaddr *) &sa,sizeof(sa));
if (retVal < 0) {
perror("sendto");
close(arp_fd);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
添加它时,它工作:
struct ifreq ifr;//There is no use except in the printf
printf("MAC address: is %02x:%02x:%02x:%02x:%02x:%02x \n",
ifr.ifr_hwaddr.sa_data[0]&0xFF,
ifr.ifr_hwaddr.sa_data[1]&0xFF,
ifr.ifr_hwaddr.sa_data[2]&0xFF,
ifr.ifr_hwaddr.sa_data[3]&0xFF,
ifr.ifr_hwaddr.sa_data[5]&0xFF,
ifr.ifr_hwaddr.sa_data[4]&0xFF);
Run Code Online (Sandbox Code Playgroud)
完整的计划:
#include "sys/socket.h"
#include "sys/types.h"
#include "stdio.h"
#include "unistd.h"
#include "string.h"
#include "net/if.h"
#include "stdlib.h"
#include "arpa/inet.h"
#include "netinet/in.h"
#include "sys/ioctl.h"
#include "netpacket/packet.h"
#include "net/ethernet.h"
#define ETHER_TYPE_FOR_ARP 0x0806
#define HW_TYPE_FOR_ETHER 0x0001
#define OP_CODE_FOR_ARP_REQ …Run Code Online (Sandbox Code Playgroud) 我有一个简单的c ++代码,它构建SYN数据包并通过原始套接字发送它.我为此分配54个字节(以太网14字节).
发送器上的Wireshark显示54个字节,但接收器上的Wireark显示60个字节.将6个字节作为预告片添加到数据包的末尾.
如果我用scapy发送数据包,也会发生同样的情况.(发送者为54,接收者为60)
你能建议吗?
c++ ×6
sockets ×2
c ×1
c++11 ×1
eclipse-cdt ×1
ip ×1
java ×1
linux ×1
master-slave ×1
networking ×1
performance ×1
stability ×1
std ×1
tcp ×1
testing ×1
tor ×1
unit-testing ×1
wireshark ×1