線程(Thread)的概念在一些以前的操作系統中是不存在的例如以前的UNIX和Windows3.X,線程與進程的區別在於子線程與父線程序運行在同一進程空間內,而子進程和父進程則運行在不同的空間。這樣一來同一進程內的不同線程間可以直接通過內存交換數據(出於數據同步原因最好不要這樣做)。
此外在Win32的定義中一個進程至少擁有一個線程,所以進程也被叫做主線程。在上一節中創建進程時大家也看見了可以在獲得進程句柄時也可以獲得一個線程句柄。在Win32中線程有兩種,窗口線程(GUI Thread)和工作線程(Worker Thread)。窗口線程將可以創建窗口,因為創建窗口後系統會為該窗口分配消息隊列,而不會為工作線程分配消息隊列,所以工作線程將消耗更少的系統資源。
我們先看看如何創建線程。
在MFC中提供了對線程功能的封裝類,CWinThread我們常使用的CWinApp類就是從這個類派生的。通常我們使用CWinThread來創建窗口線程,過程如下:
下面是個簡單的例子:
//線程類定義
class CGUIThread:public CWinThread
{
public:
CGUIThread();
virtual BOOL InitInstance(void);
virtual int ExitInstance(void);
};
CGUIThread::CGUIThread()
{
//設置自動刪除
m_bAutoDelete = TRUE;
}
BOOL CGUIThread::InitInstance(void)
{
CWnd* pWnd= new
CWnd();pWnd->CreateEx(0,
AfxRegisterWndClass( CS_HREDRAW|CS_VREDRAW) ,
"gui thread window",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,