[C++]Programming in general with multiple threads.
Code:
.:[Smith's guide to Multi-Threaded Programming in C++]:.
.:I make programming FUN!!:.
.:[Part 1]:.
OK, before we jump into this all unprepared we need to go over a few things first!
What you need:
1. Compiler ( I use Microsoft Visual Compiler 6.0 )
2. Win32 API Reference ( Don't have it? use google )
3. A Brain ( Preferably in working order )
Ok lets begin with a basic C++ layout for Win32, it should look like this:
Code:
------------------------------------
#include <stdio.h>
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
return(0);
}
-----------------------------------
Now if we look at our Win32 API Ref and look up CreateThread we get this:
Quote:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
DWORD dwStackSize, // initial thread stack size, in bytes
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to returned thread identifier
);
This will get explained later. I just have it here for reference. Ok onto the code now we need
to add a few things first:
Code:
#include <stdio.h>
#include <windows.h>
ULONG WINAPI OurFirstThread(LPVOID);
ULONG WINAPI OurFirstThread(LPVOID p)
{
MessageBox(NULL,"Yay our thread was excuted","Smith's Multi-Thread Example",MB_OK);
return(0);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
unsigned long ThreadId;
CreateThread(NULL,0,OurFirstThread,0,0,&ThreadId);
Sleep(5000) \\ Sleep for 5 seconds so the MB can be
\\ displayed.
return(0);
}
Ok, time to explain how this all works. Ok this line here:
ULONG WINAPI OurFirstThread(LPVOID);
Sets the thread up. Kinda like Dim <value> in VB. I wont go into a huge explaination you just
need it ok? This part here:
ULONG WINAPI OurFirstThread(LPVOID p)
{
MessageBox(NULL,"Yay our thread was excuted","Smith's Multi-Thread Example",MB_OK);
return(0);
}
This is the part of the program that gets turned into a thread. Whatever code is between the
"{" and "}" will be executed seperatly from the rest of the program.
And finally we get to the actual creation of
the thread:
CreateThread(NULL,0,OurFirstThread,0,0,&ThreadId);
This creates the thread the functions are explained in order.
1. Do we want a child processes to be able to inherit this thread? No
2. How big in bytes will this thread be? 0 = Autosize
3. Thread Name
4. Useless Parameter leave as 0
5. Creation flag, we can have different values in here, say you want make a thread but have it
paused to run at another time. You would use the CREATE_SUSPENDED flag.
6. Finally the pointer to hold the data ThreadId, yes it is needed.
*Just remember this is a basic tutorial.
Finally after all this you may be wondering, this is all good and well WHY? Would i need this?
Well threads are mainly used when a program needs to do 2 things at the same time. Because your
program can't do to things at once can it? Not unless you use threads. Example: Looping and
Creating a socket.