summaryrefslogtreecommitdiff
path: root/cpp/demo/IceUtil/workqueue/WorkQueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/demo/IceUtil/workqueue/WorkQueue.cpp')
-rw-r--r--cpp/demo/IceUtil/workqueue/WorkQueue.cpp131
1 files changed, 0 insertions, 131 deletions
diff --git a/cpp/demo/IceUtil/workqueue/WorkQueue.cpp b/cpp/demo/IceUtil/workqueue/WorkQueue.cpp
deleted file mode 100644
index f3e343c14a1..00000000000
--- a/cpp/demo/IceUtil/workqueue/WorkQueue.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <IceUtil/IceUtil.h>
-#include <list>
-
-using namespace std;
-
-namespace
-{
-IceUtil::Mutex* outputMutex = 0;
-
-class Init
-{
-public:
-
- Init()
- {
- outputMutex = new IceUtil::Mutex;
- }
-
- ~Init()
- {
- delete outputMutex;
- outputMutex = 0;
- }
-};
-
-Init init;
-
-}
-
-void
-mtprint(const string& data)
-{
- IceUtil::Mutex::Lock sync(*outputMutex);
- cout << data << flush;
-}
-
-class WorkQueue : public IceUtil::Thread
-{
-public:
-
- WorkQueue() { }
- ~WorkQueue() { }
-
- virtual void
- run()
- {
- string item;
- while((item = nextItem()) != "destroy")
- {
- mtprint("work item: " + item + "\n");
- IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(1));
- }
- }
-
- void
- add(const string& item)
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
- if(_queue.empty())
- {
- _monitor.notify();
- }
- _queue.push_back(item);
- }
-
-private:
-
- string
- nextItem()
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
- while(_queue.empty())
- {
- _monitor.wait();
- }
-
- string item = _queue.front();
- _queue.pop_front();
- return item;
- }
-
-
- IceUtil::Monitor<IceUtil::Mutex> _monitor;
- list<string> _queue;
-};
-
-typedef IceUtil::Handle<WorkQueue> WorkQueuePtr;
-
-int
-main()
-{
- try
- {
- WorkQueuePtr h = new WorkQueue();
- IceUtil::ThreadControl control = h->start();
- mtprint("Pushing work items");
- mtprint(".");
- h->add("item1");
- mtprint(".");
- h->add("item2");
- mtprint(".");
- h->add("item3");
- mtprint(".");
- h->add("item4");
- mtprint(".");
- h->add("item5");
- mtprint(".");
- h->add("destroy");
- mtprint("ok\n");
- mtprint("Waiting for WorkQueue to terminate\n");
- control.join();
- }
- catch(const IceUtil::Exception& ex)
- {
- ostringstream os;
- os << ex << "\n";
- mtprint(os.str());
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}