小编vin*_*nit的帖子

为什么在select中使用writefds?如何在实践中使用它们?

我正在linux中设计一个C程序,我将有两个线程.一个主要线程是event_processor_thread,它执行主函数处理.第二个线程是一个始终在后台运行的event_dispatcher线程,实时写入和读取多个接口(非阻塞异步i/o)

我在网上做了一些研究,发现实现非阻塞套接字i/o的最佳方法可以通过

  1. 的libevent
  2. select()

我选择了后者,因为它更容易,我将拥有最多4个接口来读/写.

我清楚听听/读取机制使用readfds,但我不确定如何使用writefds!如果我将event_processor_thread中的数据放入共享内存并让此事件调度程序线程从共享内存中读取并使用send(),则会选择将数据单独发送到套接字吗?这是我需要使用writefds的原因select()吗?

如果我的问题不明确,我很抱歉,我基本上想要的是拥有一个非阻塞的I/O线程来将事件分配到事件处理器线程或从事件处理器线程分配到外部接口.在这方面的任何投入都受到高度赞赏.谢谢!

c sockets linux select multithreading

5
推荐指数
2
解决办法
4759
查看次数

虚函数,为什么这里调用基类函数?

有人可以帮我解决我做错的事吗?始终调用基类指针!我正在尝试制作自定义类对象的Map.通过直接查找和索引来尝试,但结果相同!

#include "stdafx.h"
#include <iostream>
#include <string>
#include <Map>
#include <algorithm>

class Command
{
public:
    virtual int execute(std::string *args) { std::cout << "Base called ! ERROR!\n"; return -1; }
};

class ShowNames : public Command
{
public:
    int execute(std::string names)
    {
        std::cout << names;
        return 0;
    }
};

class ShowNos : public Command
{
public:
    int execute(std::string Nos)
    {
        std::cout << Nos;
        return 0;
    }
};

typedef std::map<std::string, Command*> CmdList;

CmdList buildMaps()
{
    CmdList c1;
    ShowNames s1;
    ShowNos   n1;

    c1["names"] …
Run Code Online (Sandbox Code Playgroud)

c++ virtual-functions

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

使用重载赋值运算符克隆单链表

我正在尝试用C++实现一个Singly链表类.我已经重载了赋值运算符来克隆列表.克隆本身似乎工作正常,但程序在删除克隆列表时崩溃,这导致我怀疑在复制过程中是否出错.

任何帮助都非常感谢.这是overloaded =运算符的代码:

DLList& DLList::operator=(const DLList& iList)
{
    Node *t = iList.head();
    while(t != NULL)
    {
        push(t->data);
        t = t->next;
    }
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

这是推送操作的代码:

void DLList::push(int data)
{
    Node *n = new Node;
    n->data = data;
    n->next = NULL;
    //n->random = NULL;
    n->next = _head;
    _head = n;
    //cout << "_head" <<_head->data<< "head->next" << (_head->next ? _head->next->data : 0)<<endl;
}
Run Code Online (Sandbox Code Playgroud)

这是主要代码(发生崩溃的地方):

DLList *d = new DLList();
d->push(10);
d->push(20);
d->push(30);
d->push(40);
d->setRandom();
d->display("Original list");  // Displays the original list fine …
Run Code Online (Sandbox Code Playgroud)

c++ linked-list singly-linked-list

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

从 underscore.js 转换为 vanilla javascript

我在 Underscore.js 中遇到了这段代码,我想将其转换为普通的 javascript。关于如何做到这一点有什么想法吗?

var makeLetters = function(word) { 
    return _.map(word.split(''), function(character) {
        return { name: character, chosen: false };
    });
}
Run Code Online (Sandbox Code Playgroud)

这是上述函数的当前输出,我想保留相同的结构,但我想在常规 JavaScript 中完成此操作。

0: {name: "s", chosen: false, $$hashKey: "003"}
1: {name: "c", chosen: false, $$hashKey: "004"}
2: {name: "o", chosen: false, $$hashKey: "005"}
3: {name: "p", chosen: false, $$hashKey: "006"}
4: {name: "e", chosen: false, $$hashKey: "007"}
Run Code Online (Sandbox Code Playgroud)

javascript underscore.js

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