c++ - C++ 类中的多线程非静态

标签 c++ multithreading visual-studio-2015 createthread

我正在为 Windows 开发一个应用程序,其中需要运行三个进程:_thread_EEG(采集)、_thread_MachineLearning(处理)、_thread_Interface(接口(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++ - C++ 类中的多线程非静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530047/

相关文章:

c# - MSI安装包安装程序,但无法启动

java - java中默认的新线程名称是如何给出的?

c# - 嵌套的 BackgroundWorkers : RunWorkerCompleted calls on wrong thread?

c++ - 处理按钮表 (WinAPI)

c++ - 在自制 C/C++ websocket 实现中收听消息时遇到问题

java - Java中高效的多线程数组构建

VSTO、Outlook 加载项和 Visual Studio 2015

C++ : Converting String to Double

c++ - 错误:(-215:断言失败)m.dims <= 2 in function 'FormattedImpl' in cv::dnn

c++ - 是明确的特化模板吗?