C++ Multi-thread
C++ Multi-thread
本文关键字:Multi-thread C++ 更新时间:2023-10-16
在一个类中,当我尝试为这样的方法创建一个线程时:
void *RippleBrush::paintRippleOnce(void){
while(1){
for (int j = 0; j < height; j ++) {
for(int i = 0; i < width; i ++){
int point = j * height + i;
data[point].a += ripple->rippleNow[point];
ripple->CaculateNextRipple();
}
}
}
}
void RippleBrush::paintRipple(){
pthread_t ctrl_thread;
if(pthread_create(&ctrl_thread, NULL, RippleBrush::paintRippleOnce, NULL) != 0){
perror("pthread_create");
exit(1);
}
}
显示错误:调用pthread_create没有匹配的函数
我如何在一个方法中为另一个方法在同一个类中创建线程?
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
与-pthread
编译和链接。
我认为你最好把真正的worker函数设置为静态的:
void *RippleBrush::paintRippleOnce(void){
while(1){
for (int j = 0; j < height; j ++) {
for(int i = 0; i < width; i ++){
int point = j * height + i;
data[point].a += ripple->rippleNow[point];
ripple->CaculateNextRipple();
}
}
}
}
void RippleBrush::paintRipple(){
pthread_t ctrl_thread;
if(pthread_create(&ctrl_thread,NULL, RippleBrush::paintRippleOnceWrapper,this)!=0){
perror("pthread_create");
exit(1);
}
}
static void* RippleBrush::paintRippleOnceWrapper(void *args) {
RippleBrush* brush= (RippleBrush*)args; // or dynamic_cast as you like
brush->paintRippleOnce();
}
相关文章:
- 在std::thread中,joinable()然后join()线程安全吗
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 分离一个静态常量 std::thread?
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何从 std::thread 返回值
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 嵌入式设备 -> std::thread -> FreeRTOS?
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- std::thread 增加 DLL 引用计数,从而防止卸载 DLL
- 如何防止 std::thread 在 QT 中冻结 GUI?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- C++ - Thread Pool
- 为什么参数在构造 std::thread 时移动两次
- windows c++ multi thread
- C++ Multi-thread