Hello there, greetings from Germany. ;)
I'm currently trying to work myself into AMQ. I already tried several approches to the producer thread question and have searched the web and the forum. I'm also a beginner to the multithreading theme. The situation: I would like my application to create a consumer and a producer, which is no problem. But both should live forever. The consumer sleeps via a Countdownlatch, which will never be count down, and wakes up via a Messagelistener, when a message is recieved. The producer is my main problem. The application tells me to send a message. Now i want to tell my producer thread to send this message syncron with failure handling etc, while my application runs on. How do i tell the thread to wait for a message? How do I tell the threads to live forever? I already thought about using mutexes, semaphores, signals etc. But i found out that the decaf threads already use pthread internally. So i guess there exists functions for my problems, that i haven't found so far. Propably my first trys do something which is way to complex, where there already exists methods or wrapper: I already tried to use signals, but the signal doesn't seems work with the threadID i get from the decaf thread. Eg: Application: this->consumerThread = new Thread(&cmsConsAsync); this->consumerThread->start(); cmsConsAsync.waitUntilReady(); this->producerThread = new Thread(&cmsProdAsync); this->producerThread->start(); cmsProdAsync.waitUntilReady(); this->prodThreadID = this->producerThread->getId(); printf("PID: %lld\n", this->prodThreadID); printf("State: %d\n", this->producerThread->getState()); if (this->producerThread->isAlive()) { printf("IsAlive\n"); kill(this->prodThreadID, SIGUSR1); printf("IsAlive2\n"); } else printf("I'm killed!\n"); The Producer: /* set function calls */ signal(SIGUSR1, CMSProducer::sendTextMessage); signal(SIGUSR2, CMSProducer::sendObjMessage); signal(SIGQUIT, CMSProducer::shutdown); //let caller run on latch.countDown(); //set to sleep, will wake up on signal calls //waitLatch.await(); while(CMSProducer::noQuit) { printf("PAUSE!\n"); pause(); } Is there a better way to do something like this? Best regards, amqBeginner