小编fdu*_*uff的帖子

如何在Linux上检测挂起的系统关闭?

我正在开发一个需要检测系统关闭的应用程序.但是,我没有找到任何可靠的方式来获取此事件的通知.

我知道在关机时,我的应用程序会收到一个SIGTERM信号后跟一个SIGKILL.我想知道是否有任何方法可以查询a SIGTERM是否是关闭序列的一部分

有没有人知道是否有办法以编程方式查询(C API)?

据我所知,系统没有提供任何其他方法来查询即将发生的关机.如果是这样,那也可以解决我的问题.我也一直在尝试runlevels,但改变runlevels似乎是即时的,没有任何预先警告.

c linux system-shutdown sigterm

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

如何在c ++中传递"this"

我对thisC++中的关键字很困惑,我不确定如果我通过传递做正确的事情this.这是我正在努力解决的一段代码:

ClassA::ClassA( ClassB &b) {

    b.doSth(this);
    // trying to call b's routine by passing a pointer to itself, should I use "this"?
}

ClassB::doSth(ClassA * a) {
       //do sth
}
Run Code Online (Sandbox Code Playgroud)

c++

16
推荐指数
4
解决办法
3万
查看次数

使用boost :: numeric_cast <>

当我想在不同的整数类型之间进行转换时,似乎最好的语法是使用boost::numeric_cast<>():

int y = 99999;
short x = boost::numeric_cast<short>(y); // will throw an exception if y is too large
Run Code Online (Sandbox Code Playgroud)

我从来没用过那个; 但是语法非常简单,所以一切都很顺利.

现在假设我想做一些更高级的事情:我希望它能够返回目标类型的最小值或最大值(饱和度),而不是抛出异常.我无法想出一种表达方式,但文档表明它是可能的(可能使用RawConverter策略).所有我能想到的是以下丑陋:

short x = numeric_cast<short>(max(min(y, SHORT_MAX), SHORT_MIN);
Run Code Online (Sandbox Code Playgroud)

那么我怎么能用boost来表达"饱和的演员" numeric_cast呢?

c++ boost type-conversion

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

为什么jenkinsfile以这种方式使用闭包?

这是编写Jenkins管道代码的命令模式,如下所示:

def call(body) {    
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()
}
Run Code Online (Sandbox Code Playgroud)

我不确定如何简单地说这个,但是这个闭包是隐式导入的,可以通过.groovy它所在的文件的文件名来调用.

我称之为:

MyClosure { myarg = 'sdfsdf' }
Run Code Online (Sandbox Code Playgroud)

我不完全确定这是做什么的.它正在做call(body),然后body作为代表分配.所以这意味着我传递的关闭是代表,但不仅仅是主人吗?华?我困惑.

groovy jenkins jenkins-pipeline

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

DevOps CICD - 并行阶段部署

我有一个新的发布管道包含 75 个阶段,当我创建发布时,每个阶段平均需要 5 分钟才能完成部署过程,然后移至下一个阶段,这意味着部署所有阶段需要近 7 个小时!

如何使所有阶段协同工作(并行)以在近 5 分钟内完成部署。如果这是不可能的,那么如何加快这个过程呢?

devops azure-devops azure-pipelines azure-pipelines-yaml cicd

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

Qt的连续构建系统

我是Qt/C++开发人员.我想设置一个持续集成环境,在提交源代码之后,它会触发一个构建过程,为我正在使用的3个平台构建代码:

  • Linux的
  • OS X.
  • Win32的

如果可能,我该如何设置此类环境.欢迎任何提示或链接.我已经阅读了关于詹金斯的内容,但我找不到任何好的教程.

c++ continuous-integration qt build

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

用于实时和非实时应用程序的日志记录工具

我们正在开发在RT-Linux上运行的std和realtime应用程序.问题是,从实时和非实时流程中记录应用程序跟踪有效方法是什么?

通过effecient,我的意思是记录应用轨迹的过程中应该不会造成RT-PERF通过增加延迟等打

理想情况下,跟踪应存储在带有时间戳的单个文件中,以便更轻松地跟踪进程之间的交互.

c++ linux logging real-time

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

boost :: asio :: async_write,写入大于65536字节的数据

我正在尝试通过套接字将jpeg帧写入客户端async_write().我使用boost 异步TCP日间服务器示例作为起点.

#include <ctime>
#include <iostream>
#include <string>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

std::string make_daytime_string()
{
  using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  return ctime(&now);
}

class tcp_connection
  : public boost::enable_shared_from_this<tcp_connection>
{
public:
  typedef boost::shared_ptr<tcp_connection> pointer;

  static pointer create(boost::asio::io_service& io_service)
  {
    return pointer(new tcp_connection(io_service));
  }

  tcp::socket& socket()
  {
    return socket_;
  }

  void start()
  {
    message_ = make_daytime_string();

    boost::asio::async_write(socket_, boost::asio::buffer(message_),
        boost::bind(&tcp_connection::handle_write, shared_from_this(),
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
  }

private:
  tcp_connection(boost::asio::io_service& …
Run Code Online (Sandbox Code Playgroud)

boost boost-asio

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

在应用程序版本中使用svn版本号

在VS2010解决方案(不是.NET)中,我希望将svn修订版号作为应用程序版本的一部分.

我们目前不使用makefile,只有VS解决方案/项目设置.

我想在编译时获取工作副本修订号,将其存储到变量中,以便稍后可以在代码中使用它来显示版本号.

到目前为止,我已经成功地svnversion将最新版本的工作副本作为预建事件获取.

"C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
Run Code Online (Sandbox Code Playgroud)

在构建时,我可以看到正确的修订号返回到output控制台.

现在,问题是,如何将此值存储到可在代码中使用的变量中?

我已经尝试定义一个预编译变量(_SVNREV)并使用它直接从pre-build事件框保存上面cmd的结果,但这不起作用.

_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV%="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
%_SVNREV="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
$(_SVNREV)="C:\Program Files\CollabNet\Subversion Client\svnversion.exe" -n $(SolutionDir)
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.

解决方案:我无法尝试从VS env中更新变量.所以我采用了另一种方法,将脚本称为预构建步骤,获取工作副本的svn修订版,然后创建包含该信息的头文件.

这是svnrev.bat对任何感兴趣的人:

@echo off
set cmd="C:\"Program Files\CollabNet\Subversion Client"\svnversion.exe -n %1 "
set versionfile=%1/version.h
FOR /F %%i IN ('%cmd%') DO SET SVNVER=%%i

echo Detected program revision %SVNVER% in %1
echo #pragma once > %versionfile% …
Run Code Online (Sandbox Code Playgroud)

c++ svn continuous-integration visual-studio-2010

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

如何找出C中两条共面线的交点

我有两条位于同一平面上的3D线.line1由point(x1, y1, z1)及其方向向量(a1, b1, c1)line2定义,而由point(x2, y2, z2)及其方向向量(a2, b2, c2)定义.然后两条线的参数方程是

x = x1 + a1*t;         x = x2 + a2*s;
y = y1 + b1*t;         y = y2 + b2*s;
z = z1 + c1*t;         z = z2 + c2*s;
Run Code Online (Sandbox Code Playgroud)

如果两个方向向量都是非零,我们可以通过将上面的等式的右侧等于t并且s从三个中的任何两个求解来容易地找出交叉点节点的位置.但是,有可能a1 b1 c1 a2 b2 c2并非全为非零,因此我无法以相同的方式解决这些方程.我目前的想法是逐案处理这个问题,比如

case1: a1 = 0, others are nonzero
case2: a2 = 0, others are nonzero
case3: b1 = …
Run Code Online (Sandbox Code Playgroud)

c line-intersection

8
推荐指数
2
解决办法
1554
查看次数