Rosqueamento com .NET e OpenCV?
-
06-07-2019 - |
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)
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