小编ssb*_*ssb的帖子

C++继承:在重写时调用虚方法

我试图在一个单独的线程中构建一个service可以运行(即执行它的run()函数)的对象.这是服务对象

#include <boost/noncopyable.hpp>
#include <atomic>
#include <thread>
#include <iostream>

class service : public boost::noncopyable {
 public:
  service() : stop_(false), started_(false) { }

  virtual ~service() {
    stop();
    if (thread_.joinable()) {
      thread_.join();
    }
  }

  virtual void stop() { stop_ = true; }

  virtual void start() {
    if (started_.load() == false) {
      started_ = true;
      thread_ = std::thread([&] () {
        run();
      });
    }
  }

 protected:
  virtual void run() = 0;

  std::atomic<bool> stop_;

  std::atomic<bool> started_;

  std::thread thread_;
};
Run Code Online (Sandbox Code Playgroud)

我正在创建一个test …

c++ inheritance multithreading virtual-functions

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

线程构建块:死锁,因为所有线程都用完了

在英特尔线程构建块框架中,如何确保所有线程不忙于等待其他线程完成。

例如考虑以下代码,

#include <tbb/tbb.h>
#include <vector>
#include <cstdlib>
#include <future>
#include <iostream>

std::future<bool> run_something(std::function<bool(bool)> func, bool b) {
  auto task = std::make_shared<std::packaged_task<bool()> >(std::bind(func, b));
  std::future<bool> res = task->get_future();
  tbb::task_group g;
  g.run([task]() { (*task)(); });
  return res;
};

int main() {
  tbb::parallel_for(0, 100, 1, [=](size_t i) {
    g.run([] () {
      std::cout << "A" << std::endl;  
      run_something([] (bool b) { return b; }, true).get();
    });
  });
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

这里main函数作为任务产生,因为 TBB 库使用的线程池中有线程。然后,当run_something函数中第二次调用产生更多任务时,TBB 调度程序发现没有可用的线程并且只是死锁。也就是说,我看到该打印语句在 4 超线程机器上执行了 4 次,在 8 …

c++ multithreading deadlock tbb c++11

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

用C++解压缩参数包

我有两个函数fg.f异步计算它的返回值并返回一个未来.现在,基于几个返回值f,我想调用g,但我想确保值的计算f并行发生.

请考虑以下代码:

template <typename T>
std::future<T> f(T& t);

template <typename... T>
void g(T&&... t)

template <typename... T>
void call_wrapper(T&&... t) {
  auto f1 = f(t1); // How do I set the values of f1... fn
  auto f2 = f(t2);
  ...
  g(f1.get(), f2.get()....); // How do I call g
}
Run Code Online (Sandbox Code Playgroud)

如何从函数的可变参数模板T中解压缩类型call_wrapper

c++ future argument-unpacking variadic-templates c++11

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

检查函数是否可调用

我使用is_callable如下定义的结构

template <typename F, typename... Args>
struct is_callable {
  template <typename U>
  static auto test(U* p) -> decltype((*p)(std::declval<Args>()...), void(), std::true_type());

  template <typename U>
  static auto test(...) -> decltype(std::false_type());

  static constexpr bool value = decltype(test<F>(nullptr))::value;
};
Run Code Online (Sandbox Code Playgroud)

我用它来测试声明为的lambda:

template <typename T>
struct runner {
  T t;

  template <typename F, typename = typename std::enable_if<is_callable<F, T&>::value || is_callable<F, T&&>::value>::type>
  void run(F&& f) { 
    return f(t); 
  }
};

runner<int> a{0};
a.run([&] (auto& x) {
  x++;
});
Run Code Online (Sandbox Code Playgroud)

为什么这会enable_if在AppleClang上编译失败?autos 不应该被正确推断出来吗?

c++ lambda metaprogramming enable-if c++14

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

在类中使用libuv

我正在尝试为C++库编写一个nodejs绑定,我似乎遇到了障碍.

我正在尝试使所有对C++库的调用异步,这就是我使用的原因libuv.我基本上遵循这个教程.

我希望能够从libuv中调用类成员函数uv_queue_work.看看这段代码 -

class test {
  private:
    int data;
    void Work(uv_work_t *req);
    void After(uv_work_t *req);
  public:
    Handle<Value> Async(const Arguments& args) {
      HandleScope scope;
      Local<Function> callback = Local<Function>::Cast(args[0]);
      int status = uv_queue_work(uv_default_loop(), **something**, Work, After);
      assert(status == 0);
      return Undefined();
    }
};
Run Code Online (Sandbox Code Playgroud)

基本上我希望WorkAfter函数能够处理data类的元素.然而,这似乎不起作用.我曾尝试类型转换的指针WorkAfter之后,从类型void test::(*)(uv_work_t*)void (*)(uv_work_t*).但这似乎也没有用.

你能给我一些关于如何解决这个问题的技巧吗?

c++ asynchronous casting node.js libuv

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

C++ SFINAE解决方案订单

我有两个功能

template <typename... Args>
void foo(Args&&... args) { /* ... */ }

template <typename... Args>
void foo(const std::string& name, Args&&... args) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

目前所有的调用都foo("bar", /* arguments */)试图转到第一个函数而不是第二个函数.我想重新排序这些函数,以便SFINAE在第一个函数之前找到第二个函数.我不能std::enable_if用来检查char数组/字符串,因为Args...包可能包含std::string&const char (&) [].我该怎么做呢?

c++ variadic-functions sfinae enable-if c++14

4
推荐指数
2
解决办法
282
查看次数

XCode中的类轮廓

我正在寻找一个XCode插件或一些配置设置,可以让我看到文件中的类结构,通过在Eclipse的右侧显示所有定义的类,变量和函数,就像Eclipse一样.可以在此处找到vim的相同示例.我在C++和Objective-C中工作,并希望能够使用这两种语言.下面的eclipse截图展示了我在说什么.

Eclipse截图

有人可以指出这样一个问题,或者如何使用XCode设置完成此操作.

c++ xcode editor objective-c

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

Angular-UI中的Keypress

我使用按键操作遇到一些问题如下 -

<div ng-controller="GBNController">
...
<input id="search-field" type="text" placeholder="JSON Query" ng-model="queryText" ui-keypress="{enter: foo()}"/>
...
</div>
Run Code Online (Sandbox Code Playgroud)

我的javascript有 -

var AngApp = angular.module('gbn', ['ui']);
var GBNController = function($scope) {
    $scope.queryText = '';
    $scope.foo = function() {
        alert('test');
    }
};
Run Code Online (Sandbox Code Playgroud)

现在只有在加载文档时才调用此函数foo,然后在return文本字段中的keypress事件永远不会被处理.

我正在使用主分支的当前负责人.

我在这里做错了什么,还是这个坏了?

javascript html5 angularjs

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

在Python数组中查找最小值

我有两个阵列说x = [110, 10, 1000 ....]y = ['adas', 'asdasqe', 'ae1e' ....]

这两个数组都具有相同的长度.我的问题是打印10个值,y使得相应的值x是10个最大值.

在一个平均测试的情况下,xy在长度4000-5000.所以速度至关重要.你能告诉我使用python的一些内置函数做到这一点的方法,以便尽可能快地进行操作.

python arrays sorting

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

Python和Homebrew Vim

在我的Mac,我使用MacVimhomebrew我的大多数编辑的.

~|? vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun 20 2012 13:16:02)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
-conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs
-dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path
+find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv
+insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent
+listcmds +localmap …
Run Code Online (Sandbox Code Playgroud)

python macos vim homebrew

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