小编old*_*994的帖子

启动一个守护程序线程,它是该类的私有方法?

我是C++ 11线程的新手,我正在尝试做如下的事情:

class Something {
public:
    void start() {
        this->task_ = std::thread(&Something::someTask, this);
        this->isRunning_ = true;
        this->task_.detach(); // I read detach will stop it from hanging
    }

    void stop() {
        this->isRunning = false;
    }

    ~Something() {
         this->stop();
    }        

private:
    std::atomic<bool> isRunning_;
    std::thread task_;
    void someTask()
    {
        while(this->isRunning_) {
            // do something forever
        }
    }
};

Something whatever;
whatever.start();
Run Code Online (Sandbox Code Playgroud)

但是,线程不断被阻止.whatever.start()执行后没什么.它只是在循环运行时挂起.

c++ multithreading c++11

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

与GCC组装导致与.data有关的奇怪的重定位错误

这是一个以前没有发生过的问题.我很确信这可能是我的包装回购的一个问题(我最近重新安装了我的Arch系统,而这刚刚开始发生).

我在x86_64中写了一个小小的hello世界:

.data
str:    .asciz  "Test"

.text
.globl main
main:
    sub $8, %rsp
    mov $str, %rdi
    call puts
    add $8, %rsp
    ret
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用GCC进行汇编和链接 - 就像我过去做过很多次一样 - 简单地说:

gcc test.s -o test

然后输出此错误:

/ usr/bin/ld:/tmp/ccAKVV4D.o:在创建共享对象时,不能使用针对`.data'的重定位R_X86_64_32S; 使用-fPIC/usr/bin/ld重新编译:最终链接失败:输出collect2上的不可表示的部分:错误:ld返回1退出状态

这个错误从来没有发生在我身上.我试图通过谷歌搜索相同的错误消息解决问题,但它提出了具体的事情,而我认为这是一个普遍的问题.我已经尝试重新安装base-devel和整个GCC工具链.我不知道我还能做什么(请不要建议使用nasm,这是异端邪说).

我想我错过了一些明显的东西,但是我已经将GCC用于我的装配需求很长一段时间了.

assembly gcc gnu-assembler

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

标签 统计

assembly ×1

c++ ×1

c++11 ×1

gcc ×1

gnu-assembler ×1

multithreading ×1