在线程中调用一个线程会给我带来错误,如果我只是调用函数

时间:2018-04-03 00:13:47

标签: c++ multithreading mingw codeblocks

你能从另一个线程中调用一个线程吗?我有一个C ++程序,它与一个与串口通信的C库交互。我可以调用该函数并进行编译,但是当我尝试使用线程调用它时,它会抛出一些错误。 我在MATLAB和Arduino方面有大学经验,并且在C ++中一起破解了一些东西,但对C ++来说还是一个新手。这是我第一次尝试使用线程。 我很乐意提供所需的其他信息。

编译得很好:

int main()
{
    unsigned char readVals[4096];
    CheckCOMPort(readVals); //This is the function call in question
    return 0;
}

但这不是:

int main()
{
    unsigned char readVals[4096];
    std::thread scanCOMPort(CheckCOMPort(readVals)); //This is the thread function call in question
    stop_flag = true;
    scanCOMPort.join();

    return 0;
}

错误:

||=== Build: Debug in ComPortReadWrite (compiler: GNU GCC Compiler) ===|
C:\...\functional||In instantiation of 'struct std::_Bind_simple<bool()>':|
C:\...\thread|142|required from 'std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = bool; _Args = {}]'|
C:\...\COMPort.cpp|122|required from here|
C:\...\functional|1505|error: no type named 'type' in 'class std::result_of<bool()>'|
C:\...\functional|1526|error: no type named 'type' in 'class std::result_of<bool()>'|

2 个答案:

答案 0 :(得分:0)

您试图在主线程中实际调用CheckCOMPort(),然后将其返回值传递给std::thread。那不是你想要的。您需要将CheckCOMPort()本身传递给std::thread,以及线程在线程调用时将线程传递给CheckCOMPort()的参数。

试试这个:

int main()
{
    unsigned char readVals[4096];
    std::thread scanCOMPort(CheckCOMPort, readVals);
    stop_flag = true;
    scanCOMPort.join();

    return 0;
}

答案 1 :(得分:0)

尝试给出函数指针,然后用逗号分隔它的参数。

sudo apt-get update
sudo apt-get install php5-mysqlnd

你可以在互联网上阅读更多关于它的工作原理。