我有一个关于如何用c ++改变我的书面程序的问题 如下图所示。
其实我的程序开始了。如果我想启动该功能,例如test::test1
这是一个永不结束的while(1)
循环,循环下的程序永远不会运行。
所以我搜索了很多,我的主题是pthread来解决我的问题。
但我真的不知道,如何改变我的计划......
我收到了以下文件:
main.cpp
test.h
test.cpp
以下是while(1)-Loop out
的{{1}}
函数test.cpp
将打开一个数据库并保存值1-3,时间,日期。
我希望函数save()
在主程序初始化类测试时启动。
有没有人有线索,如何改变我的计划?
test::test1()
答案 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语句