Pergunta

Estou tendo problemas para obter uma linha de trabalho com OpenCV . O problema é com a parte ThreadStart () do meu código.

public ref class circles
{
    public:
        static void circleFind(bool isPhoto, const char *  windowName1, const char *  windowName2, const char * photoName)
        {(stuff)}
};

int main(int argc, char* argv[])
{
    const char *windowName1;
    const char *windowName2;
    const char *photoName;

    windowName1 = "Find Circles";
    windowName2 = "Gray";
    photoName = "Colonies 3.jpg";

    bool isPhoto = false;

    //circles(isPhoto, windowName1, windowName2, photoName);
    Thread^ circleThread = gcnew Thread(
        gcnew ThreadStart (&circles::circleFind(isPhoto, windowName1, windowName2, photoName) ));
    circleThread->Start();

    area(isPhoto, photoName);

    return 0;
}

Este não é todo o código, mas a parte importante. Os erros que recebo são:

1> .. \ .. \ .. \ .. \ .. \ .. \ .. \ Programas (x86) \ OpenCV \ amostras \ c \ círculo dection.cpp (130): erro C2102: ' &' requer l-value

1> .. \ .. \ .. \ .. \ .. \ .. \ .. \ Programas (x86) \ OpenCV \ amostras \ c \ círculo dection.cpp (130): erro C3350: ' System :: Enfiar :: ThreadStart': um construtor delegado espera 2 argumento (s)

Foi útil?

Solução

O problema aqui é que você está tentando usar uma função para um delegado ThreadStart que tem uma assinatura incompatível. ThreadStart é um delegado que não tem argumentos e não retorna nenhum valor. Você está tentando usar um método através do qual leva 4 argumentos. Isso não vai funcionar.

Você vai precisar para passar em vez de um método que leva sem argumentos.

Para passar parâmetros em C ++, a sua melhor aposta é a de criar uma nova classe que tem todos os parâmetros como campos. Em seguida, dar-lhe um método que não tem parâmetros e retorna sem valor e usá-lo como o alvo ThreadStart.

ThreadHelper^ h = gcnew ThreadHelper();
h->Param1 = someValue;
ThreadStart^ threadDelegate = gcnew ThreadStart( h, &ThreadHelper::DoMoreWork );

Há um exemplo completo desta na página de documentação ThreadStart

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top