[英]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"
的错误argument of type "DWORD(_stdcall uMotor::*)(LPVOID arg)" is incompatible with parameter of type "LPTHREAD_START_ROUTINE"
我究竟做错了什么?
线程函数必须是静态的,所以添加static
之前DWORD __stdcall
...
此外, CreateThread
第四个参数是例程参数。 您期望指向uMotor
指针,而是传递&endTime
。 用this
替换&endTime
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.