在c ++中使用pthread进行一段时间(1)循环?

时间:2014-11-04 21:51:13

标签: c++ class pthreads

我有一个关于如何用c ++改变我的书面程序的问题 如下图所示。

其实我的程序开始了。如果我想启动该功能,例如test::test1 这是一个永不结束的while(1)循环,循环下的程序永远不会运行。

所以我搜索了很多,我的主题是pthread来解决我的问题。

但我真的不知道,如何改变我的计划......

我收到了以下文件:

main.cpp
test.h
test.cpp

以下是while(1)-Loop out的{​​{1}} 函数test.cpp将打开一个数据库并保存值1-3,时间,日期。 我希望函数save()在主程序初始化类测试时启动。

有没有人有线索,如何改变我的计划?

test::test1()

1 个答案:

答案 0 :(得分:0)

如果您真的受限于pthreads,则以下内容可能有所帮助。

#include <pthread.h> 
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <unistd.h> 

class test { 
public: 
    void save(...) {}; 
    void test1() { 
        double i = 1; 

        while(true) 
        { 
            save(i, 0, 0, 0, 0, 0); 
            i++; 

            std::cerr << " ** " << std::endl; 
            usleep( 1000000 ); 

        } 
    } 

    static void * run(void * arg ) { 
        ((test *)arg)->test1();
        return NULL; 
    } 
}; 


int main() 
{ 
    pthread_t thr; 
    test tst; 
    pthread_create(&thr, NULL,test::run,&tst); 
    pthread_join(thr,NULL); 
    return 1; 
} 

正在运行的pthread最重要的部分是指向C样式函数的指针,该函数采用void *参数。非静态C ++成员函数总是将 this 作为隐藏参数,因此它们不是pthread的直接候选者。我总是创建一个静态run(...)方法,该方法显式获取指向对象的指针并将调用转发给非静态成员函数。

如果允许您使用更现代的C ++功能,我会关注@Ulrich Eckhardt并使用std :: thread构造。

PS:在run(...)中添加了缺少的retun语句