2017-03-10 2 views
1

Ich habe ein Programm, das mehrere Eingaben vom Benutzer nimmt und basierend auf der Eingabe, die Arbeit in einem Thread-Pool wie veröffentlicht die folgenden:ioService.post (boost :: bind (& myFunction, this, attr1, attri2) gibt die Arbeit nicht

while (getline (file, input)){ 
     if(input =='a'){ 
      ioService_.post(boost::bind(&myClass::myFunction, this, input, counter)); 
     } //end if 

     else if(input=='b'){ 
      ioService_.post(boost::bind(importedFunction, input)); 
     } 

     else{ 
      break; 
     } 
    }//end while 

    threadpool.join_all(); 

} 

die Funktion importedFunction von einer anderen Klasse importiert wird und der Code funktioniert mit es richtig, sondern für die myFunction Funktion funktioniert es nicht schreiben

ich ursprünglich die Funktion als diese Bindung.

ioService_.post(boost::bind(myClass::myFunction, input, counter)); 

und es gab mir einen Fehler, der ist:

/usr/local/include/boost/bind/bind.hpp:75:22: Type 'void (multithreading::*)(std::__1::basic_string, int)' cannot be used prior to '::' because it has no members

und dann wechselte ich in diesem und gelöst den Fehler:

ioService_.post(boost::bind(&myClass::myFunction, this, input, counter)); 

aber jetzt ist die Arbeit nicht vorgelegt, und ich weiß nicht, Warum.

Antwort

1

Ich vermute, dass Sie möglicherweise run() die io_service vergessen haben.

Wenn ja, fügen Sie

ioService_.run(); 

somehwere.

Und vielleicht lesen Sie über io_service::work, um den Dienst zwischen den Aufgaben lebendig zu halten. Es ist möglich, dass Service-Threads die run() abgeschlossen haben, bevor Sie die Arbeit veröffentlicht haben.

+0

Ich tat das, ich habe eine Routine, wo ich den Pool initialisieren, d. H. Die Threads erstellen und die Arbeit erstellen. Wenn ich nur die importierte Funktion verwende, funktioniert sie immer, wenn ich die Funktion verwende, die ich in meiner Klasse erstellt habe. – user7631183

+1

Es ist schwer zu verstehen, was Sie mit "importierte Funktion" und "meine Funktion" meinen, da wir nichts davon sehen können. Bitte teilen Sie eine SSCCE, die das Problem zeigt. – sehe

+0

für die importierte Funktion ist es in einem anderen Header definiert #include class2 und ich habe die Klasse in meine Datei aufgenommen, dann benutze ich es. Meine Funktion ist eine Funktion, die ich in der Klasse definiert habe, die ich verwende – user7631183

Verwandte Themen