程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 線程控制

線程控制

編輯:關於C語言

 

  線程(Thread)的概念在一些以前的操作系統中是不存在的例如以前的UNIX和Windows3.X,線程與進程的區別在於子線程與父線程序運行在同一進程空間內,而子進程和父進程則運行在不同的空間。這樣一來同一進程內的不同線程間可以直接通過內存交換數據(出於數據同步原因最好不要這樣做)。

  此外在Win32的定義中一個進程至少擁有一個線程,所以進程也被叫做主線程。在上一節中創建進程時大家也看見了可以在獲得進程句柄時也可以獲得一個線程句柄。在Win32中線程有兩種,窗口線程(GUI Thread)和工作線程(Worker Thread)。窗口線程將可以創建窗口,因為創建窗口後系統會為該窗口分配消息隊列,而不會為工作線程分配消息隊列,所以工作線程將消耗更少的系統資源。

我們先看看如何創建線程。

  在MFC中提供了對線程功能的封裝類,CWinThread我們常使用的CWinApp類就是從這個類派生的。通常我們使用CWinThread來創建窗口線程,過程如下:

  • 從CWinThread中派生新類。
  • 重載CWinThread::InitInstance()函數,在其中創建窗口並將窗口指針賦給m_pMainWnd。
  • 如果需要可以重載CWinThread::ExitInstance(),在窗口被銷毀時該函數將會被調用。也就是說窗口線程的生命期是於窗口的生命器聯系起來的。

下面是個簡單的例子:

//線程類定義
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,
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved