小编Mar*_*ork的帖子

使用getcontext/setcontext切换堆栈

我试图了解getcontext/setcontext是否能在特定场景中正常工作.

我可以看到如何使用setcontext()将堆栈展开回历史记录中的某个位置.

#include <stdio.h>
#include <ucontext.h>

int  rollback = 0;
ucontext_t context;

void func(void)
{
    setcontext(cp);
}

int main(void)
{
    getcontext(&context);
    if (rollback == 0)
    {
        printf("getcontext has been called\n");
        rollback++;
        func();
    }
    else
    {
        printf("setcontext has been called\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我想知道在放松之后你是否可以重新回到未来的某个地方?我想这取决于getcontext()调用捕获堆栈的副本,​​我无法在文档中找到确切的详细信息.

#include <stdio.h>
#include <ucontext.h>

int  rollback     = 0;
int  backToFuture = 0;
ucontext_t context;
ucontext_t futureContext;

void func(void)
{
    // Some complex calc
    if (some-condition)
    {
        getcontext(&futureContext);  // After returning I want to come back
                                     // …
Run Code Online (Sandbox Code Playgroud)

c ucontext

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

C++读取文件标记

另一个请求抱歉..现在我正在逐个阅读令牌并且它有效,但我想知道什么时候有一个新的线路..

如果我的文件包含

Hey Bob
Now
Run Code Online (Sandbox Code Playgroud)

应该给我

Hey
Bob
[NEW LINE]
NOW
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用getline的情况下执行此操作?

c++ file token

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

赋值运算符是否适用于不同类型的对象?

class A {
public:
void operator=(const B &in);
private:
 int a;
};

class B {
private:
 int c;

}
Run Code Online (Sandbox Code Playgroud)

抱歉.发生了一个错误.赋值运算符有效吗?或者有没有办法实现这一目标?[A和B级之间没有关系.]

void A::operator=(const B& in) 
{ 
a = in.c;

} 
Run Code Online (Sandbox Code Playgroud)

非常感谢.

c++ virtual-functions operator-overloading

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

圆角

复制:
创建圆角的最佳方法是什么?
如何制作一个交叉浏览器,W3C有效,语义非JavaScript ROUND角?

可以使用哪些技术(符合标准)在HTML页面的显示元素上放置圆角?

我将HTML CSS和javascript放在下面的标签列表中,因为我认为它们相当普遍,但是如果您使用的技术使用了可以使用的其他技术,并且这些技术在可以正常工作的标准浏览器中(相对)可靠,那么请关于哪些浏览器会失败的注释。

html javascript css

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

XPATH 一致性

我有一个需要测试的 XPath 引擎实现。

是否有一组标准一致性测试可供我们用来验证是否符合 XPath 规范(与 XSLT 相关)。

完美的应该是 XML 文档的 XPath 表达式和预期结果。

xslt xpath standards-compliance

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

pthread_create分段错误

我正在我的程序中使用'pthread_create'方法,并在此方法中获得分段错误.
什么可能导致这种情况?我正在使用正确的参数类型调用此函数!

这是代码:

pthread_t* _daemon;


void* writer(void* arg){
    // stuff that dont involve "arg"...
}


int initdevice(){
    if(pthread_create(_daemon, NULL, &writer, NULL) != 0) //seg in this line
    {

      cerr << "system error\n";
      return ERR_CODE;
    }
    return SUCCESS;
}

int main () {
    initdevice();
    return 0;
}  
Run Code Online (Sandbox Code Playgroud)

注意:我在pthread_create中调用writer之前尝试运行它也没有'&',而且 - 我们尝试向此方法发送一些void*参数而不是最后一个NULL参数.

c++ pthreads segmentation-fault

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

posix管道作为工作队列

我见过的工作队列的正常实现涉及互斥和条件变量.

消费者:

A) Acquires Lock
B) While Queue empty
      Wait on Condition Variable (thus suspending thread and releasing lock)
C) Work object retrieved from queue
D) Lock is released
E) Do Work
F) GOTO A
Run Code Online (Sandbox Code Playgroud)

制片人:

A) Acquires Lock
B) Work is added to queue
C) condition variable is signaled (potentially releasing worker)
D) Lock is released
Run Code Online (Sandbox Code Playgroud)

我一直在浏览一些代码,我看到了一个使用POSIX管道的实现(我以前没见过这种技术).

消费者:

A) Do select on pipe (thus suspending thread while no work)
B) Get Job from pipe
C) Do Work
D) GOTO …
Run Code Online (Sandbox Code Playgroud)

c++ pipe message-queue

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

Variadac 宏将宏应用于所有参数

我正在尝试使用 C++11 可变宏。

我试图对列表中的每个参数应用另一个宏。
这是我的第一次尝试:

#define  APPLY_CHAIN(first, ...)    APPLY_ACT(first) APPLY_CHAIN( __VA_ARGS__ )
Run Code Online (Sandbox Code Playgroud)

不幸的是这没有用。

我最终让它发挥作用。但它有点复杂,并且有“n”的限制(其中“n”是我愿意为其键入宏的最大大小)。

#define COUNT_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...)    N
#define COUNT(...)   COUNT_N( __VA_ARGS__, 10, 9, 8, 7, 6, 5 ,4, 3, 2, 1)

#define BUILD_CHAIN_1(_1)       APPLY_ACT(_1)
#define BUILD_CHAIN_2(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_1(__VA_ARGS__)
#define BUILD_CHAIN_3(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_2(__VA_ARGS__)
#define BUILD_CHAIN_4(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_3(__VA_ARGS__)
#define BUILD_CHAIN_5(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_4(__VA_ARGS__)
#define BUILD_CHAIN_6(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_5(__VA_ARGS__)
#define BUILD_CHAIN_7(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_6(__VA_ARGS__)
#define BUILD_CHAIN_8(_1, ...)  APPLY_ACT(_1) BUILD_CHAIN_7(__VA_ARGS__) …
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor variadic-macros c++11

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

C++ 11变量参数对齐

这是我想要实现的界面:

 Statement  select("SELECT * FROM People WHERE ID > ? AND ID < ?");
 select.execute(1462, 1477, [](int ID, std::string const& person, double item1, float item2){
     std::cout << "Got Row:" 
               << ID     << ", " 
               << person << ", " 
               << item1  << ", " 
               << item2  << "\n";
 });
Run Code Online (Sandbox Code Playgroud)

哪里'?' select字符串中的变量1462, 1477在运行时与变量参数列表匹配.

这是类定义:

class Statement
{
    public:
        Statement(std::string const&);

        template<class Action, class ...Args>
        void execute(Args... param, Action action);
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会产生错误:

test.cpp:133:12:错误:没有匹配的成员函数来调用'
execute'select.execute(1462,1477,[](int ID,std :: string const&person,double item1,float item2){ …

c++ lambda variadic-functions c++11

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

在同一函数中使用指针和引用作为返回类型

所以我在看一些代码,就碰到了这一点。

class Data{
 private:
  int data;
  Data* next;
 public:
   Data(int d=0): data(d), next(NULL) {}
   void SetData(int d) { data = d;}
   int  GetData() { return data; }
   Data*& GetNext() { return next; }
 }
Run Code Online (Sandbox Code Playgroud)

GetNext()返回类型是该引用和指针作为返回类型。这是什么意思?

c++

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