Re: multithreaded c++ question
Hi,
Here is an implementation of my multithreading class (meant to derive from
it and overide run method)
unsigned int __stdcall CPProcess::Spawn(CPProcess *Self)
{
Self->Run();
return 0;
}
bool CPProcess::Start()
{
unsigned int ID = 0;
if( StopEvent = CreateEvent( 0, TRUE, FALSE, 0 ) )
{
if( !( ThreadID = reinterpret_cast<HANDLE>( _beginthreadex( 0, 0,
reinterpret_cast<unsigned int (__stdcall *)(void *)>( Spawn ), this, 0,
&ID) ) ) )
{
CloseHandle( StopEvent );
StopEvent = 0;
}
}
return ThreadID != 0;
}
void CPProcess::Stop()
{
SetEvent( StopEvent );
}
bool CPProcess::Wait(ULONG MilliSeconds)
{
if( WaitForSingleObject( ThreadID, MilliSeconds ) == WAIT_OBJECT_0 )
{
CloseHandle( StopEvent );
CloseHandle( ThreadID );
ThreadID = StopEvent = 0;
}
return ThreadID == 0;
}
bool CPProcess::Stopped()
{
return WaitForSingleObject( StopEvent, 0 ) == WAIT_OBJECT_0;
}
void CPProcess::Run()
{
}
Regards, Ron AF Greve
http://www.InformationSuperHighway.eu
"Chris Roth" <czr137@mail.usask.ca> wrote in message
news:evgmnh$fer$1@webmail.usask.ca...
I'm using VS.net 7.1 on Windows XP.
I have a class that hold a container of doubles. One function (foo) for
the class calls a sub-function (bar) for each of the doubles. I'd like to
multithread foo so that the bar sub-functions can run on multiple threads.
I'd like to imlpement this with _beginthreadex as I'm using std::vector.
Please provide some working code around the following details:
#include <windows.h> // for HANDLE
#include <process.h> // for _beginthreadex()
#include <vector>
using namespace std;
class A
{
private:
vector<double> v;
double d; // some other variable common to each thread;
double bar( double x );
public:
vector<double> foo();
};
vector<double> A::foo()
{
vector r( v.size() );
for( int i=0; i<int(v.size()); ++i )
r[i] = bar( v[i] );
return r;
}
double A::bar( double x )
{
double r = x*d; // some function using x and d
// obviosly more complicated in the real code...
return r;
}
Now what I'd like is for multiple instances of bar to run on my two cores.
Can you help me please?