Sample Application run time error

in Help Center
this is a sample application in ice development guide 19.10.
when i build project(debug),link is ok, but have 2 warning:
:\program files\microsoft visual studio\vc98\include\stlport\stl\debug\_debug.h(166) : warning C4005: '_STLP_DEBUG_CHECK' : macro redefinition
d:\program files\microsoft visual studio\vc98\include\stlport\stl\_config.h(375) : see previous definition of '_STLP_DEBUG_CHECK'
d:\program files\microsoft visual studio\vc98\include\stlport\stl\debug\_debug.h(167) : warning C4005: '_STLP_DEBUG_DO' : macro redefinition
d:\program files\microsoft visual studio\vc98\include\stlport\stl\_config.h(376) : see previous definition of '_STLP_DEBUG_DO'
i skip this,and run it. a error message show(see attachment): invaild memory address access.
who can tell me what is the problem?
// test1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
#include <list>
#include <IceUtil/Thread.h>
using namespace std;
template <class T> class Queue {
public:
void put(const T & item) {
_q.push_back(item);
}
T get() {
T item = _q.front();
_q.pop_front();
return item;
}
private:
list<T> _q;
};
Queue<int> q;
class ReaderThread : public IceUtil::Thread {
virtual void run() {
for (int i = 0; i < 100; ++i)
cout << q.get() << endl;
}
};
class WriterThread : public IceUtil::Thread {
virtual void run() {
for (int i = 0; i < 100; ++i)
q.put(i);
}
};
int main() {
vector<IceUtil::ThreadControl> threads;
int i;
// Create five reader threads and start them
//
for (i = 0; i < 5; ++i) {
IceUtil::ThreadPtr t = new ReaderThread;
threads.push_back(t->start());
}
// Create five writer threads and start them
//
for (i = 0; i < 5; ++i) {
IceUtil::ThreadPtr t = new WriterThread;
threads.push_back(t->start());
}
// Wait for all threads to finish
//
for (vector<IceUtil::ThreadControl>::iterator ii
= threads.begin(); ii != threads.end(); ++ii) {
ii->join();
}
}
when i build project(debug),link is ok, but have 2 warning:
:\program files\microsoft visual studio\vc98\include\stlport\stl\debug\_debug.h(166) : warning C4005: '_STLP_DEBUG_CHECK' : macro redefinition
d:\program files\microsoft visual studio\vc98\include\stlport\stl\_config.h(375) : see previous definition of '_STLP_DEBUG_CHECK'
d:\program files\microsoft visual studio\vc98\include\stlport\stl\debug\_debug.h(167) : warning C4005: '_STLP_DEBUG_DO' : macro redefinition
d:\program files\microsoft visual studio\vc98\include\stlport\stl\_config.h(376) : see previous definition of '_STLP_DEBUG_DO'
i skip this,and run it. a error message show(see attachment): invaild memory address access.
who can tell me what is the problem?
// test1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
#include <list>
#include <IceUtil/Thread.h>
using namespace std;
template <class T> class Queue {
public:
void put(const T & item) {
_q.push_back(item);
}
T get() {
T item = _q.front();
_q.pop_front();
return item;
}
private:
list<T> _q;
};
Queue<int> q;
class ReaderThread : public IceUtil::Thread {
virtual void run() {
for (int i = 0; i < 100; ++i)
cout << q.get() << endl;
}
};
class WriterThread : public IceUtil::Thread {
virtual void run() {
for (int i = 0; i < 100; ++i)
q.put(i);
}
};
int main() {
vector<IceUtil::ThreadControl> threads;
int i;
// Create five reader threads and start them
//
for (i = 0; i < 5; ++i) {
IceUtil::ThreadPtr t = new ReaderThread;
threads.push_back(t->start());
}
// Create five writer threads and start them
//
for (i = 0; i < 5; ++i) {
IceUtil::ThreadPtr t = new WriterThread;
threads.push_back(t->start());
}
// Wait for all threads to finish
//
for (vector<IceUtil::ThreadControl>::iterator ii
= threads.begin(); ii != threads.end(); ++ii) {
ii->join();
}
}
0
Comments
template <class T> class Queue : public IceUtil::Monitor<IceUtil::Mutex> {
public:
void put(const T & item) {
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
_q.push_back(item);
notify();
}
T get() {
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
while(_q.empty())
{
wait();
}
T item = _q.front();
_q.pop_front();
return item;
}
private:
list<T> _q;
};
Please read the information about IceUtil::Monitor in the Ice manual for more information.
Regarding the warning, I believe that you are mixing the debug and non-debug version of STLport, i.e., some of your files are compiled with debug while others are compiled in release mode.
I am so hurry want to run this sample that lost to check the code ;(.
about the warning,you said i mixing the debug and non-debug version of STLport,i build debug version only,if i want to remove the warning,how can i do?
You can also use one of the demos in the Ice source distribution as an example for how to set up a Visual C++ 6.0 project. There are no warnings there.