C++多線程(一)

C++多線程(一)

WIN 多線程API

一 簡單實例
比較簡單的代碼,創建10個線程,其中使第4個線程在一創建就掛起,等到其他的線程執行的差不多的時候再使第4個線程恢復執行。
#include?<stdio.h>?
#include?
<stdlib.h>?
#include?
<windows.h>?

#define?THREAD_NUM?10

DWORD?WINAPI?PrintThreads?(LPVOID);

int?main?()?
{?
????HANDLE?hThread[THREAD_NUM];?
????DWORD?dwThreadID[THREAD_NUM];?

????
for?(int?i=0;?i<THREAD_NUM;?++i)?
????
{?
????????
int?isStartImmediate?=?0;
????????
if(3?==?i)
????????????isStartImmediate?
=?CREATE_SUSPENDED;
????????hThread[i]
=CreateThread(NULL,????????????????//?security?attributes?that?should?be?applied?to?the?new?thread,?
??????????????????????????????????????????????????????????????????????????????? ?
//?this?is?for?NT.?Use?NULL?to?get?the?default?security?attributes.?Use?NULL?for?win95?
????????????????????????????????0,??????????????????????????????????????????? //?default?size?of?1MB?can?be?passed?by?passing?zero.?
????????????????????????????????PrintThreads,???????????????????? //?function?name:address?of?the?function?where?the?new?thread?starts.
????????????????????????????????(LPVOID)i,???????????????????????? //?parameter(void?pointer):?pointer?to?the?32?bit?parameter?that?will?be?passed?into?the?thread
????????????????????????????????isStartImmediate,???????????? //?flags?to?control?the?creation?of?the?thread.?Passing?zero?starts?the?thread?immediately.?
??????????????????????????????????????????????????????????????????????????
//?Passing?CREATE_SUSPENDED?suspends?the?thread?until?the?ResumeThread(?)?function?is?called.
????????????????????????????????&dwThreadID[i]??????????? //?pointer?to?a?32-bit?variable?that?receives?the?thread?identifier.
????????????????????????????????);?
????????
if?(hThread[i])
????????
{?
????????????printf?(
"Thread?launched?successfully/n");????????????????
????????}
?????????
????}
?
????printf(
"Start?sleep?100,?and?let?other?thread?excute/n");
????Sleep?(
100);????

????printf(
"Start?sleep?100,?and?thread?3?excute/n");
????ResumeThread(hThread[
3]);
????
????Sleep(
100);

????
for(int?i?=?0;?i<THREAD_NUM;?++i)
????
{
????????
if?(hThread[i])
????????
{????????????
????????????CloseHandle(hThread[i]);????
//?You?need?to?use?this?to?release?kernel?objects?when?you?are?done?using?them.?
????????????????????????????????????????
//?If?a?process?exits?without?closing?the?thread?handle,?
????????????????????????????????????????
//?the?operating?system?drops?the?reference?counts?for?those?objects.?
????????????????????????????????????????
//?But?if?a?process?frequently?creates?threads?without?closing?the?handles,?
????????????????????????????????????????
//?there?could?be?hundreds?of?thread?kernel?objects?lying?around?and?these?resource?leaks?can?have?a?big?hit?on?performance.
????????}
?
????}

????
return?(0);?
}
?

//function?PrintThreads?
DWORD?WINAPI?PrintThreads?(LPVOID?num)
{
????
for?(int?i=0;?i<10;?i++)?
????????printf?(
"Thread?Number?is?%d%d%d/n",?num,num,num);?
????
return?0;
}


二 其他基本API的說明
CreateThread() 調用成功返回句柄和一個id。
CloseHandle()? 關閉一個打開的對象句柄,該對象句柄可以是線程句柄,也可以是進程、信號量等其他內核對象的句柄.

SuspendThread(HANDLE) 允許開發人員將HANDLE指定的線程掛起,如果要掛起的線程占有共享資源,則可能導致死鎖。
ResumeThread(HANDLE)? 恢復指定的線程。

TerminateThread() 立即終止線程的工作,不做任何清理工作。
ExitThread() 線程函數返回時回調用次函數,所以一般我們不去顯示的調用。

ExitThread是推薦使用的結束一個線程的方法,當調用該函數時,當前線程的棧被釋放,然后線程終止,相對于TerminateThread函數來說,這樣做能夠更好地完成附加在該線程上的DLL的清除工作. 但是ExitThread()會導致線程在清處構造器/自動變量之前就終止,所以我們最好不要顯示的調用ExitThread()。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255099.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HALCON示例程序measure_ball_bond.hdev電路板焊點位置測量

HALCON示例程序measure_ball_bond.hdev電路板焊點位置測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () dev_close_window () FileName : ‘bonds/ball_bond_ccd_’ read_image (Image, FileName 1$‘02’) dev_open_window_fit_imag…

rank()over 函數的使用

1. over()是分析函數&#xff0c;可以和rank()函數配合使用&#xff0c;也可以和其他函數配合使用。取每個學科排名前三的分數&#xff0c;sql語句如下&#xff1a; select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T where T.rk&…

天梯賽2016-L2

L2-001. 緊急救援 作為一個城市的應急救援隊伍的負責人&#xff0c;你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連接城市的快速道路。每個城市的救援隊數量和每一條連接兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助電話給你的時候&#xff0c;你…

伺服系統控制網絡的重要性! 現場總線的重要性! SSCNET運動控制系統與發展趨勢

引言&#xff1a;在2010年的時候&#xff0c;在北京的一個數控公司工作。產品采用的是通過運動控制卡發脈沖的方式&#xff0c;控制機床的X、Y、Z軸進行加工。 機床在加工產品的時候&#xff0c;一直存在著精度的問題&#xff0c;例如DMG的機床可以達到0.01的加工精度&#x…

apache配置

wamp環境安裝需要VC運行庫的支持 apache如果需要外網訪問&#xff0c;在其配置文件中尋找127.0.0.1然后替換為all 外網訪問需要關閉防火墻&#xff1f;轉載于:https://www.cnblogs.com/gremlin/p/5581486.html

TCP/IP 通信示例

TCP/IP 通信示例 Global String ReadData_P_All$, ReadData_P$(10), data$ Global Preserve Double x Global Integer foundnumber_PFunction TCPServerSetNet #201, "192.168.0.1", 4000, CRLF, NONE, 0OpenNet #201 As ClientWaitNet #201Print "TCP Connect…

MySQL分庫分表總結參考

單庫單表 單庫單表是最常見的數據庫設計&#xff0c;例如&#xff0c;有一張用戶(user)表放在數據庫db中&#xff0c;所有的用戶都可以在db庫中的user表中查到。 單庫多表 隨著用戶數量的增加&#xff0c;user表的數據量會越來越大&#xff0c;當數據量達到一定程度的時候對u…

小兔伴伴家庭動物園AR智能早教產品上市

2016年6月&#xff0c;經過樂卓大家庭所有人的共同努力&#xff0c;公司旗下首款新品——小兔伴伴之《家庭動物園》3D智能學習卡正式面世。 每個孩子都應該在合適的時間去體驗豐富的聲音、色彩和動作&#xff0c;《家庭動物園》&#xff0c;專為2-6歲兒童貼心設計&#xff0c;是…

EPSON 自帶CCD圖像處理包使用舉例

EPSON 機器人可以購買CCD圖像處理包選項&#xff0c;CCD圖像處理包與SPEL語言高度結合&#xff0c;可以非常快的將項目投入應用&#xff0c;舉例說明CCD圖像處理包與SPEL的聯合使用。 EPSON 以視覺序列定義圖像處理的一個項目&#xff0c;視覺序列是一組按照特定順序排列的視覺…

索引使用原則

前兩篇文章我總結了一些SQL數據庫索引的問題&#xff0c;這篇主要來分析下索引的優缼點&#xff0c;以及如何正確使用索引。 索引的優點&#xff1a;這個顯而易見&#xff0c;正確的索引會大大提高數據查詢&#xff0c;對結果進行排序、分組的操作效率。 索引的缺點…

根據時間變換頁面背景

1.概述 有些時侯為了豐富頁面的顯示效果&#xff0c;將頁面制作成根據時間變換頁面背景的樣式&#xff0c;這樣會使瀏覽者對此網站不會感覺厭倦&#xff0c;同時也會覺得網站制作的非常新穎。本實例通過Date對象的getHours()方法獲得當前系統時間的小時&#xff0c;然后根據不同…

EPSON 自帶CCD圖像處理包的典型應用框架

EPSON 自帶CCD圖像處理包的典型應用框架 Function main ******************************************** Very important statement below: Use the * //非常重要的是在實際運行時&#xff0c;用合適的Z數值代替預定義的 ZHeight 。Z height which you wrote down earlier in *…

EPSON 利用CCD圖像處理包標定工具坐標系

EPSON 利用CCD圖像處理包標定工具坐標系 仰視式安裝的相機可以用來計算工具偏移&#xff0c;下例使用仰視式相機來計算工具偏移。該功能首先運行一個序列來定位工具的尖端。然后計算出工具偏移&#xff08;前提是CCD已標定&#xff09;。 Function CalcTool Boolean foundReal…

掛馬方式研究、掛馬檢測技術研究

1. 掛馬定義 所謂的掛馬&#xff0c;就是黑客通過各種手段&#xff0c;包括SQL注入&#xff0c;網站敏感文件掃描&#xff0c;服務器漏洞&#xff0c;網站程序0day, 等各種方法獲得網站管理員賬號&#xff0c;然后登陸網站后臺&#xff0c;通過數據庫"備份/恢復"或者…

大幅面多相機高精度定位及測量解決方案

隨著機器視覺應用的日益廣泛&#xff0c;大幅面多相機視覺系統的需求越來越多&#xff0c;主要應用方向為大幅面高精度的定位與測量和場景拼接等。多相機視覺系統的難點在于多相機坐標系的統一&#xff0c;可以分為兩類&#xff0c;一是相機視野間無重疊部分&#xff0c;二是相…

Hadoop 使用FileSystem API 讀取數據

代碼&#xff1a; package com.hadoop;import java.io.IOException; import java.io.InputStream; import java.net.URI;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.…

EPSON 機器人多任務下的互鎖處理

在很多時候&#xff0c;有多個任務具有動作命令指令。為了防止多個任務運行動作命令時&#xff0c;對僅有的一個機器人產生的控制沖突&#xff0c;有必要進行連鎖處理。一個任務進行機器人控制時&#xff0c;另一個任務則會等待控制權。這樣&#xff0c;各任務就可以完全按照預…

mysql高可用方案MHA介紹

mysql高可用方案MHA介紹概述MHA是一位日本MySQL大牛用Perl寫的一套MySQL故障切換方案&#xff0c;來保證數據庫系統的高可用.在宕機的時間內&#xff08;通常10—30秒內&#xff09;&#xff0c;完成故障切換&#xff0c;部署MHA&#xff0c;可避免主從一致性問題&#xff0c;節…

SQL遞歸查詢(with as)

SQL遞歸查詢(with cte as) with cte as( select Id,Pid,DeptName,0 as lvl from Department where Id 2 union all select d.Id,d.Pid,d.DeptName,lvl1 from cte c inner join Department d on c.Id d.Pid)select * from cte1 表結構Id Pid …