boost 线程中“函数参数太少”

问题描述 投票:0回答:1

我正在尝试开发立体视觉系统。每当我尝试构建代码时,我都会收到以下消息:

   ***** Build of configuration Debug for project RicoCameraCpp ****

    make all 
    Building file: ../main.cpp
    Invoking: Cross G++ Compiler
    g++ -I/home/ux/Downloads -I/usr/local/boost_1_52_0/boost -I/usr/local/boost_1_52_0 -    I/home/ux/Downloads/opencv2 -include/home/ux/Downloads/opencv2/opencv_modules.hpp -include/usr/local/boost_1_52_0/boost/thread.hpp -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
In file included from /usr/local/boost_1_52_0/boost/thread/thread.hpp:22:0,
                 from /usr/local/boost_1_52_0/boost/thread.hpp:13,
                 from <command-line>:0:
/usr/local/boost_1_52_0/boost/thread/detail/thread.hpp: In member function ‘void boost::detail::thread_data<F>::run() [with F = int (*)(int, char**)]’:
../main.cpp:81:1:   instantiated from here
    /usr/local/boost_1_52_0/boost/thread/detail/thread.hpp:78:17: error: too few arguments to function
    /usr/local/boost_1_52_0/boost/system/error_code.hpp: At global scope:
    /usr/local/boost_1_52_0/boost/system/error_code.hpp:214:36: warning: ‘boost::system::posix_category’ defined but not used [-Wunused-variable]
    /usr/local/boost_1_52_0/boost/system/error_code.hpp:215:36: warning:     ‘boost::system::errno_ecat’ defined but not used [-Wunused-variable]
    /usr/local/boost_1_52_0/boost/system/error_code.hpp:216:36: warning:     ‘boost::system::native_ecat’ defined but not used [-Wunused-variable]
    make: *** [main.o] Error 1

    **** Build Finished *****

这是我的代码:

#include "cstdlib"
#include "cmath"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include "boost/thread.hpp"
#include <iostream>

using namespace std;
using namespace boost;
using namespace cv;

int firstCam( int argc, char** argv )
{
    //initilize first camera
    CvCapture* captureRightCam = cvCaptureFromCAM(0);

    //check if first camera is available
    if(!captureRightCam)
        {
        cout << "No first camera to capture\n";
            return(-1);
        }

    //create right window
    cvNamedWindow( "Right Cam", CV_WINDOW_AUTOSIZE );

    //display frames for every cvWaitKey duration
    while ( 1 )
        {
            //get frames
        IplImage* rightFrame = cvQueryFrame( captureRightCam );

        //check if captured
        if ( !rightFrame )
        {
            fprintf( stderr, "ERROR: frame is null...\n" );
            getchar();
            break;
        }
        //show frames inside the windows
        cvShowImage( "Right Cam", rightFrame );
        cvWaitKey(150);
    }
//release and destroy windows
cvReleaseCapture( &captureRightCam );
cvDestroyWindow( "Right Cam" );
return 0;
}

int secondCam( int argc, char** argv )
{
CvCapture* captureLeftCam = cvCaptureFromCAM(1);
if(!captureLeftCam)
    {
        cout << "No second camera to capture\n";
        return(-1);
    }
cvNamedWindow( "Left Cam", CV_WINDOW_AUTOSIZE );
while ( 1 )
    {
        IplImage* leftFrame = cvQueryFrame( captureLeftCam );
        if ( !leftFrame )
        {
            fprintf( stderr, "ERROR: frame is null...\n" );
            getchar();
            break;
        }
        cvShowImage( "Left Cam", leftFrame );
        cvWaitKey(150);
    }
cvReleaseCapture( &captureLeftCam );
cvDestroyWindow( "Left Cam" );
return 0;
}

int main()
{
boost::thread t1(firstCam);
boost::thread t2(secondCam);
return 0;
}

我做错了什么?

c++ multithreading boost
1个回答
3
投票

我认为错误消息非常具有描述性,实际上:

您正在尝试从您的函数中创建一个线程

firstCam
。该函数需要两个参数,但是当您创建线程时,您不会给它任何参数。因此,它无法弄清楚要传递给函数的参数,因此会抱怨“参数太少”。

在这种情况下,您似乎没有考虑就从某个地方复制了函数签名。您根本不使用

argc
argv

(旁注:

using namespace std;
using namespace boost;
using namespace cv;

这是一个坏主意,迟早会给你带来麻烦。详情请参阅GotW 53。)

© www.soinside.com 2019 - 2024. All rights reserved.