类 C++ 中的多线程非静态
Multithreading non-static in class C++
我正在为Windows开发一个应用程序,其中需要运行三个进程:_thread_EEG(获取),_thread_MachineLearning(处理),_thread_Interface(接口)。第二个进程使用第一个进程的数据,第三个进程需要第二个进程的结果。
class uMotor{
private:
long _endTime;
bool _busyBuffer;
bool _busyLabel;
Raw _Shared_buffer;
char _Shared_label ;
uEEG _gtec;
Interface _screen;
void _EEG (long endTime);
void _MachineLearning(long endTime);
void _Interface (long endTime);
DWORD __stdcall _Thread_EEG(LPVOID arg){
uMotor *yc_ptr = (uMotor*)arg;
yc_ptr->_EEG(_endTime);
return 1;
}
DWORD __stdcall _Thread_MachineLearning(LPVOID arg){
uMotor *yc_ptr = (uMotor*)arg;
yc_ptr->_MachineLearning(_endTime);
return 1;
}
DWORD __stdcall _Thread_Interface(LPVOID arg){
uMotor *yc_ptr = (uMotor*)arg;
yc_ptr->_Interface(_endTime);
return 1;
}
public:
uMotor();
void BCI();
~uMotor();
};
线程在函数uMotor::BCI()
中调用:
void uMotor::BCI(){
const long NUM_SECONDS_RUNNING = 9;
long startTime = clock();
long endTime = startTime + NUM_SECONDS_RUNNING * CLOCKS_PER_SEC;
HANDLE Handle_Thread_EEG = 0;
HANDLE Handle_Thread_MachineLearning = 0;
HANDLE Handle_Thread_Interface = 0;
Handle_Thread_EEG = CreateThread(NULL, 0, _Thread_EEG, &endTime, 0, NULL);
Handle_Thread_EEG = CreateThread(NULL, 0, _Thread_MachineLearning, &endTime, 0, NULL);
Handle_Thread_EEG = CreateThread(NULL, 0, _Thread_Interface, &endTime, 0, NULL);
}
在函数CreateThread
中,Visual Studio 2015显示错误argument of type "DWORD(_stdcall uMotor::*)(LPVOID arg)" is incompatible with parameter of type "LPTHREAD_START_ROUTINE"
我做错了什么?
线程函数必须是静态的,所以在DWORD __stdcall
之前添加static
...
此外,要CreateThread
的第四个参数是例程参数。您期望指向uMotor
的指针,但传递&endTime
。将&endTime
替换为 this
。
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程处理中的静态成员变量
- C++函数中的多线程静态 POD 初始化
- C++多线程:是本地静态lambda线程安全的初始化
- 类 C++ 中的多线程非静态
- C++静态成员在静态函数和多线程中
- 使用多线程调试 DLL (/MDd) C 运行时库生成静态 Opencv 库
- 多线程环境中的静态局部变量初始化
- 使用c++ 11多线程处理非静态成员函数