建立執行緒
handle createthread(
lpsecurity_attributes lpthreadattributes, // 安全屬性 通常為null
size_t dwstacksize, // 引數用於設定執行緒可以將多少位址空間用於它自己的堆疊
// 每個執行緒擁有它自己的堆疊
lpthread_start_routine lpstartaddress, // 引數用於指明想要新執行緒執行的執行緒函式的位址
lpvoid lpparameter, // 執行緒函式的引數
// 既可以是數字,也可以是指向包含其他資訊的乙個資料結構的指標
dword dwcreationflags, // 0 建立完畢立即排程 create_suspended建立後掛起
lpdword lpthreadid // 執行緒id
);
// 返回值:執行緒控制代碼
執行緒控制代碼與執行緒id:
執行緒是由windows核心負責建立與管理的,控制代碼相當於乙個令牌,有了這個令牌就可以使用執行緒物件.
執行緒id是身份證,唯一的,系統進行執行緒排程的時候要使用的.
建立執行緒**:
//建立乙個新的執行緒
handle hthread = ::createthread(null, 0, threadproc,
null, 0, null);
//如果不在其他的地方引用它 關閉控制代碼
::closehandle(hthread);
執行緒函式:
dword winapi threadproc(
lpvoid lpparameter // thread data
) 向執行緒函式傳遞變數的兩種方式:
(1) 全域性變數
(2) 執行緒引數
掛起執行緒:
::suspendthread(hthread);
恢復執行緒:
::resumethread(hthread); 同步呼叫 非同步呼叫
終止執行緒: //
方式一: ::terminatethread(hthread,3);
::waitforsingleobject(hthread,infinite);
::exitthread(dword dwexitcode);
//執行功能
方式二:
執行緒函式返回
//
方式三:
::terminatethread(hthread,2);
::waitforsingleobject(hthread,infinite);
判斷執行緒是否結束
bool getexitcodethread(
handle hthread,
lpdword lpexitcode
);
still_active 正在執行
引數:
hthread: 要結束的執行緒控制代碼
dwexitcode: 指定執行緒的退出**。可以通過getexitcodethread來檢視乙個執行緒的退出**
執行緒上下文
typedef struct _context context;
獲取執行緒context結構:
//掛起執行緒
suspendthread(執行緒控制代碼);
context context
//設定要獲取的型別
context.contextflags = context_control;
//獲取
bool ok = ::getthreadcontext(hthread,&context);
//設定
context.eip = 0x401000;
setthreadcontext(hthread,&context);
Windows C C 語言選單基本程式設計
使用cfree 5.0 來看一下win32 選單基本程式設計 新建乙個視窗工程 生成的檔案如下 乙個基本視窗程式 main.c中包含winmain和視窗過程函式 h是標頭檔案 rc是資源檔案 main.c包含resource.h 程式執行起來,有視窗,有選單,這些是自己生成的 下面來新增乙個選單項,...
windows C C 實現ini檔案讀寫
ini格式稍微來說比較簡單為 tiatle 欄位1 內容 欄位2 內容 內容為純數字時,可以使用整形 int 方式讀取,如果是字串則需使用字串 string 讀取,部分 需要用到windows api 所以需加上windows.h標頭檔案 1 獲取程式路徑 獲取程式路徑 char char int ...
執行緒 建立執行緒
重寫run public void run 例項化物件 類名 t new 類名 設定屬性 名字,優先順序 優先順序是1 10的整數,1最小,預設是5 優先順序越高,該執行緒占用cpu的時間 機會 越多。id是自動生成 t.setname 執行緒1 t.setpriority 4 啟動執行緒,預設呼叫...