- 博客(14)
- 收藏
- 关注
原创 select
select这种思想很想CPU对IO的处理的发展历程, select的地位就像中断管理器, IO设备有中断请求时才通知CPU, 对应的, 只有当客户端有连接请求时才会通知server进行处理. 也就是说只要server收到通知, 就一定有数据待处理或连接待响应, 不会再被阻塞而浪费资源了;select函数#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select(int
2021-03-26 08:42:17 102
原创 socket封装
wrap.c#include "wrap.h"void perr_exit(const char *s) { perror(s); exit(-1);}int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr) { int n;again: if ((n = accept(fd, sa, salenptr)) < 0) { if ((errno == ECONNABORTED) || (errno.
2021-03-26 08:42:05 144
原创 多进程并发服务器
错误处理函数的封装wrap.h#ifndef __WRAP_H_#define __WRAP_H_#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <unistd.h>void perr_exit(const char *s);int Accept(int fd, struct sockaddr *sa
2021-03-25 12:57:58 134
原创 socket编程
socket编程网络字节序小端法: 高位存在高地址, 低位存在低地址(计算机本地采用);大端法: 高位存在低地址, 低位存在高地址(网络通信采用);调用库函数做网络字节序和主机字节序的转换;#include<arpa/inet.h>uint32_t htonl(uint32_t hostlong); //主要针对IPuint16_t htons(uint16_t hostshort); //主要针对portuint32_t ntohl(uint32_t netlon
2021-03-25 10:09:19 187
原创 classes及messages
classes及messages全局配置class GlobalData成员变量值CyberConfig config_CHECK(InitConfig())std::string host_ip_InitHostInfo():string host_name_InitHostInfo()int process_id_getpid()std::string process_group_“cyber_default_” + std::to_strin
2021-03-02 16:58:02 308
原创 调度
调度class Reader : public ReaderBase template <typename MessageT> bool Reader<MessageT>::Init() {````略 std::function<void(const std::shared_ptr<MessageT>&)> func; if (reader_func_ != nullptr) { func
2021-03-02 16:53:15 294
原创 接收消息
接收消息class Transport template <typename M> auto Transport::CreateReceiver( const RoleAttributes& attr, const typename Receiver<M>::MessageListener& msg_listener, const OptionalMode& mode) -> typena
2021-03-02 16:50:45 278
原创 创建一个listener
创建一个listenervoid MessageCallback( const std::shared_ptr<apollo::cyber::examples::proto::Chatter>& msg) { AINFO << "Received message seq-> " << msg->seq(); AINFO << "msgcontent->" << msg->content();}
2021-03-02 16:48:38 413
原创 发送消息
发送消息talker->Write(msg);auto msg = std::make_shared();msg->set_timestamp(Time::Now().ToNanosecond());msg->set_lidar_timestamp(Time::Now().ToNanosecond());msg->set_seq(seq++);msg->set_content(“Hello, apollo!”);talker->Write(msg);
2021-03-02 16:34:38 252
原创 创建一个Writer
创建一个Writerauto talker = talker_node->CreateWriter(“channel/chatter”);class Node template <typename MessageT> auto Node::CreateWriter(const std::string& channel_name) -> std::shared_ptr<Writer<MessageT>> { return
2021-03-02 16:32:35 514 3
原创 创建一个节点Node
范例int main(int argc, char *argv[]) { // init cyber framework apollo::cyber::Init(argv[0]); // create talker node auto talker_node = apollo::cyber::CreateNode("talker"); // create talker auto talker = talker_node->CreateWriter<Chatter>
2021-03-02 16:28:48 654
原创 cyber RT概括
用户通过调用CreateNode函数创造一个节点,该函数是在节点类Node的友元函数。Nodel类的成员变量·node_channel_impl(NodeChannellmpl)负责创建Reader和Writer。Writer类中包含transmitter_ , change_conn_, channel_manager_,及JoinTheTopology函数。Writer类在初始化过程中会调用函数transport::Transport::Instance()->CreateTransmit.
2021-03-02 16:24:51 1068 1
原创 gtest使用
gtest使用#include "gtest/gtest.h"int add(int a,int b){ return a+b;}int sub(int a,int b){ return a-b;}TEST(testCase,add){ EXPECT_EQ(add(2,3),3);}TEST(testCase,sub){ EXPECT_EQ(sub(1,3),-2);}int main(int argc,char **argv){ testing
2021-03-02 16:04:37 137
原创 SoftmaxLayer
#include "caffe/layers/softmax_layer.hpp"#include <algorithm>#include <vector>#include "caffe/util/math_functions.hpp"namespace caffe {template <typename Dtype>void SoftmaxLayer<Dtype>::Reshape(const vector<Blob<Dt..
2021-03-02 15:54:26 230
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人