A
worker thread in MFC is used for many background tasks like
printing, computations, network servers etc., Unlike
User Interface threads, worker threads do not have their own
Message Maps.
A
worker thread in an MFC program can be implemented with a
simple controlling function of the following declaration type.
UINT Controlling_function_name(void parameter);
AfxBeginThread:
Worker threads are created by calling the function
AfxBeginThread. This function has two signatures. One for
creating user interface threads and the other for creating a
worker thread. The AfxBeginThread for worker thread takes the
function name as the first parameter. The function passed as a
parameter to the AfxBeginThread function will then be used for
running as a separate thread.
MFC
Worker Thread Sample - AfxBeginThread:
This article explains the worker thread with a Dialog based
application.
- Start
by creating a MFC Dialog based application with name as
WorkerThread.
- After
generating the necessary files, open the
WorkerThreadDlg.cpp and copy/paste the following code.
UINT WorkerThreadProc( LPVOID Param ) //Sample function
for using in AfxBeginThread
{
CFile file;
file.Open("C:\\Temp\\test.txt",CFile::modeCreate|CFile::modeWrite);
CString strValue;
for(int i=0;i<=100;i++)
{
strValue.Format("Value:%d",i);
file.Write(strValue,strValue.GetLength());
// Write to the file for worker thread using
AfxBeginThread
}
file.Close();
return TRUE;
}
- In
one of the dialog commands, call the AfxBeginThread as
follows. For the sake of simplicity this article uses it
in the OnOK function.
void CWorkerThreadDlg::OnOK()
{
// TODO: Add extra validation here
AfxBeginThread(WorkerThreadProc,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
MessageBox("Thread Started");
}
- Now
Build and run the application. If the OK button is
clicked, it will write the data into a file.
Actually speaking this sample does not truly use a
multi-threaded situation. But still it tries to explain how
the AfxBeginThread can be used to create a worker thread.
The sample
code explains how to create a worker thread with the above
code samples.