majordomas
January 12th, 2005, 03:51 PM
I have a table with strings (CStringArray) and I want my threads to read data from it but no to dublicate it. First thread read first string ....., fifth thread read fifth string etc.
global variables CStringArray lista,CMutex lock;
in header file:
//start
public:
static UINT WorkerThreadProc (LPVOID param); //controlling function header
typedef struct THREADSTRUCT //structure for passing to the controlling function
{
CThreadDlg* _this;
} THREADSTRUCT;
///end
lista.Add("xxxxxxxxx");
lista.Add("aaaaaaaaaa");
lista.Add("bbbbbbbb");
lista.Add("ccccccccc");
lista.Add("ddddddddd");
lista.Add("eeeeeeeeeee");
lista.Add("fffffffffffff");
lista.Add("zzzzzzzzzzz");
void CThreadDlg::OnOK()
{
THREADSTRUCT *_param = new THREADSTRUCT;
_param->_this = this;
for(int i=0;i<5;i++) //starting 5 threads
{
AfxBeginThread(WorkerThreadProc,_param,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
UINT CThreadDlg::WorkerThreadProc( LPVOID param )
{
THREADSTRUCT* ts = (THREADSTRUCT*)param;
CSingleLock lock(&g_m,&g_C);
lock.Lock();
ts->_this->OnGo();
lock.Unlock();
return 1;
}
void CThreadDlg::OnGo()
{
for(int i=0;i<lista.GetSize();i++)
{
MessageBox(lista[i]);
}
}
I don't know how to use cmutex lock() und unlock();
global variables CStringArray lista,CMutex lock;
in header file:
//start
public:
static UINT WorkerThreadProc (LPVOID param); //controlling function header
typedef struct THREADSTRUCT //structure for passing to the controlling function
{
CThreadDlg* _this;
} THREADSTRUCT;
///end
lista.Add("xxxxxxxxx");
lista.Add("aaaaaaaaaa");
lista.Add("bbbbbbbb");
lista.Add("ccccccccc");
lista.Add("ddddddddd");
lista.Add("eeeeeeeeeee");
lista.Add("fffffffffffff");
lista.Add("zzzzzzzzzzz");
void CThreadDlg::OnOK()
{
THREADSTRUCT *_param = new THREADSTRUCT;
_param->_this = this;
for(int i=0;i<5;i++) //starting 5 threads
{
AfxBeginThread(WorkerThreadProc,_param,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
UINT CThreadDlg::WorkerThreadProc( LPVOID param )
{
THREADSTRUCT* ts = (THREADSTRUCT*)param;
CSingleLock lock(&g_m,&g_C);
lock.Lock();
ts->_this->OnGo();
lock.Unlock();
return 1;
}
void CThreadDlg::OnGo()
{
for(int i=0;i<lista.GetSize();i++)
{
MessageBox(lista[i]);
}
}
I don't know how to use cmutex lock() und unlock();