你能从另一个线程中调用一个线程吗?我有一个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()>'|
答案 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
你可以在互联网上阅读更多关于它的工作原理。