導航:首頁 > 編程語言 > windows下c語言多線程編程

windows下c語言多線程編程

發布時間:2022-06-04 13:18:12

A. C語言,windows多線程編程

點量Http、FTP多線程斷點續傳下載組件(下載DLL)的開發目的是讓用戶可以無需關心Http/FTP協議的具體細節,只需要幾十行甚至幾行代碼,便可以實現一個功能完善的Http/FTP下載軟體。點量Http/FTP下載組件(DLL)支持多線程、斷點續傳、顯示詳細下載過程、自動查找鏡像網址、支持代理傳輸等完善的功能。

點量Http、FTP下載內核源碼使用高效的c++代碼編寫,提供標準的動態鏈接庫(DLL),可供C/C++、Delphi、C#、Java、VB等語言和各常用開發環境調用,讓您完全像調用系統API一樣的調用。

點量Http/FTP組件的功能簡介:

標准Http和FTP下載支持:完全標準的Http和FTP協議支持,內部通過網址自動區分是Http還是FTP下載。
極速下載(2.0以後版本):超越國內絕大多數下載軟體的下載速度。新版內核在2M ADSL的環境下下載,有些文件的速度可以達到1400K位元組/秒以上,超過了帶寬的極限。下載速度可以用極速形容。
多線程傳輸:可以將文件自動分塊,並採用多線程下載。並可自由設置線程數目。
斷點續傳:點量Http/FTP有優秀的斷點續傳支持,每次啟動自動從上次下載的位置開始,不需要重復下載。
提供詳細的下載詳情介面(2.0以後版本):可以看到整個下載過程的步驟,比如開啟了多少線程、伺服器的應答過程、錯誤信息等。
支持多種高級設置:設置線程數目、磁碟緩存大小、搜索鏡像伺服器的詳細參數設置、下載文件完成後同步文件為伺服器上的文件時間、下載過程中可以自定義文件臨時後綴、未完成的文件設為隱藏屬性。
支持磁碟緩存:點量Http/FTP下載DLL支持設置磁碟緩存,減少對磁碟的讀寫,並提升下載速度。
支持設置Refer:點量Http/FTP下載組件支持設置下載時的Refer,以便可以繞過一些防盜鏈的網站,直接下載內容。
限速功能:點量Http/FTP下載組件可方便的設置下載限速。
多種磁碟分配方式:點量Http/FTP下載組件支持預分配和邊下載邊分配兩種磁碟方式,滿足多種下載需求。
自動搜索鏡像加速:點量Http/FTP內置了鏡像搜索功能,在下載文件的同時,會自動搜索哪些其它網站還有這個文件,自動從其它網址下載加速。
可提供源碼:支付一定的費用,便可以獲得全部的點量Http/FTP下載組件的源代碼,免除您的所有後顧之憂。
良好的服務:作為點量軟體旗下的軟體,可享受到點量軟體的優秀服務,我們的服務讓您如同擁有一個稱心的專業員工。

點量Http/FTP 下載組件可以適用於任何Http和FTP下載的領域,讓您可以在1天內完成一個完整的Http下載軟體的全部功能。比如,您可以用於產品的升級、文件的下載和傳輸等。
點量Http/FTP內核可以為您帶來:

1、大大節省您的開發成本:了解Http和FTP的協議,再去編碼、測試,即使對於一個非常有經驗的開發人員來說,也需要較長期的時間,此間耗費的人力資源成本和管理成本可謂不少。而使用點量Http/FTP,您就不需要從製造輪子開始製造您的汽車,將注意力集中於車的設計而不是基礎設備的建設。何況我們的產品性能是如此優越!

2、強有力的技術支持:作者長期從事下載技術的研發,所提供的技術支持相當於您僱傭了一位具有豐富經驗,無需從頭學習的開發人員,可以在您的系統建設過程中為您提供整體系統架設的意見。

如果您是個人作為非商業目的使用,您可以自由、免費的使用點量Http/FTP下載組件內核庫和演示程序,也期待收到您反饋的意見和建議;如果您是商業使用,那麼您需要聯系作者申請產品的商業授權。

B. c語言如何編寫一個簡單的多線程程序

這是一個多線程例子,裡面只有兩個線程,是生產者/消費者模式,已編譯通過,注釋很詳細,
如下:

/* 以生產者和消費者模型問題來闡述Linux線程的控制和通信你
生產者線程將生產的產品送入緩沖區,消費者線程則從中取出產品。
緩沖區有N個,是一個環形的緩沖池。
*/
#include <stdio.h>
#include <pthread.h>

#define BUFFER_SIZE 16

struct prodcons
{
int buffer[BUFFER_SIZE];/*實際存放數據的數組*/
pthread_mutex_t lock;/*互斥體lock,用於對緩沖區的互斥操作*/
int readpos,writepos; /*讀寫指針*/
pthread_cond_t notempty;/*緩沖區非空的條件變數*/
pthread_cond_t notfull;/*緩沖區未滿 的條件變數*/
};

/*初始化緩沖區*/
void pthread_init( struct prodcons *p)
{
pthread_mutex_init(&p->lock,NULL);
pthread_cond_init(&p->notempty,NULL);
pthread_cond_init(&p->notfull,NULL);
p->readpos = 0;
p->writepos = 0;
}

/*將產品放入緩沖區,這里是存入一個整數*/
void put(struct prodcons *p,int data)
{
pthread_mutex_lock(&p->lock);
/*等待緩沖區未滿*/
if((p->writepos +1)%BUFFER_SIZE ==p->readpos)
{
pthread_cond_wait(&p->notfull,&p->lock);
}
p->buffer[p->writepos] =data;
p->writepos++;
if(p->writepos >= BUFFER_SIZE)
p->writepos = 0;
pthread_cond_signal(&p->notempty);
pthread_mutex_unlock(&p->lock);
}
/*從緩沖區取出整數*/
int get(struct prodcons *p)
{
int data;
pthread_mutex_lock(&p->lock);
/*等待緩沖區非空*/
if(p->writepos == p->readpos)
{
pthread_cond_wait(&p->notempty ,&p->lock);//非空就設置條件變數notempty
}
/*讀書據,移動讀指針*/
data = p->buffer[p->readpos];
p->readpos++;
if(p->readpos == BUFFER_SIZE)
p->readpos = 0;
/*設置緩沖區未滿的條件變數*/
pthread_cond_signal(&p->notfull);
pthread_mutex_unlock(&p->lock);
return data;
}
/*測試:生產站線程將1 到1000的整數送入緩沖區,消費者線程從緩沖區中獲取整數,兩者都列印信息*/
#define OVER (-1)
struct prodcons buffer;
void *procer(void *data)
{
int n;
for( n=0;n<1000;n++)
{
printf("%d ------>\n",n);
put(&buffer,n);
}
put(&buffer,OVER);
return NULL;
}
void *consumer(void *data)
{
int d;
while(1)
{
d = get(&buffer);
if(d == OVER)
break;
else
printf("----->%d\n",d);
}
return NULL;
}
int main()
{
pthread_t th_p,th_c;
void *retval;
pthread_init(&buffer);
pthread_create(&th_p,NULL,procer,0);
pthread_create(&th_c,NULL,consumer,0);
/*等待兩個線程結束*/
pthread_join(th_p, &retval);
pthread_join(th_c,&retval);
return 0;
}

C. 高手進,關於C語言在windows上建立多線程的問題(VC6.0上實現)

原因 是 在使用CreateThread 會造成一些 資源的無法釋放 比如c++對象

當然原因不止這些 還很有幾個 詳情 你可以參考windows核心編程

D. windows環境,多線程情況下,C語言向文件寫入數據。

①、對於你能寫這么長的問題描述,說明你很認真。

②、你的目的性較強,但是你也想有更加明確的目標,我可以給你講一下怎麼自己去尋找目標和路線以及怎樣學習。

③、計算機專業領域一共有幾個大方向,十幾個分支方向,而每個分支方向又有幾十個小方向,每一個方向的深入學習與熟練到一定火候都不是一朝一夕,互相之間也不是完全沒聯系的,但是你現在就應該選擇一個大方向並在其中的一個小方向內深入(為什麼要這么早就選擇具體的分支方向?後面說)。

④、這里列出計算機的幾個大方向(非編程開發類的我就不說了):
基本方向:
1、單片機、嵌入式方向
2、網路編程:涉及到伺服器程序、客戶端開發、腳本設計等。
3、系統編程:基礎API開發、桌面開發、系統程序開發、服務程序
4、圖形學:3D、2D、圖像識別、人臉識別
5、音頻:語音識別、音頻解碼、音頻軟體
6、編譯原理:編譯器設計、腳本解釋器、虛擬機、非自然語言翻譯系統
7、應用層開發:利用高層語言去開發表層應用
8、安全:反工程、病毒、反病毒、木馬、反木馬、軟體破解、軟體加殼
附加方向:
8、人工智慧:遺傳演算法、神經網路、灰色系統等等
9、游戲設計:各種游戲引擎設計以及業務邏輯設計等

⑤、基本方向是你一定要選的,附加方向只是基於基本方向的一些錦上添花,但是不管你怎麼選,最開始某些東西一定要深入而不是只是懂就夠(當然你對自己要求似乎不會很低),我把這個列出來:

數據結構:下面其他理論的基礎。
操作系統原理:理解操作系統的架構和細節,你才能對以後關於多線程、文件管理、內存管理、指令優先順序等有一個正確理解和運用。
編譯原理:能夠升華你對計算機編程語言的理解,對以後出現的各種編譯、解釋、兼容、移植、優化、並發與並行演算法等有一個深入理解。
資料庫系統原理:這個是進入公司都要會的,也是大型軟體開發的基礎。
軟體工程:這個是你能夠在經驗不足還能保證大項目正常完成的理論基礎。
網路技術:這個是必須學的,因為目前幾乎沒有一款裝幾率很高的軟體或者平台跟網路無關。

數學的話,主要是:離散數學、線性代數、高等數學、計算機圖形學、概率論

以上幾個基礎就是你成為一個融匯各個主要分支牛人必須學的(當然不是指理論,而是理論+實踐編碼能力)

⑥以上都是大的基礎,要一一攻破並深入學習,雖然網路時代計算機專業知識爆炸式的增長,但是以上幾個基礎掌握後,會發現,以後的什麼新的理論和技術都是基於這些大基礎,你就很容易理解了。

⑦我為什麼開頭不講你要具體學什麼怎麼順序學呢?因為那些技術你要掌握的話,根本可以自己解決,但是如果你由於興趣,沉迷於一些自己可見的小范圍技術的話,那麼畢業後雖然也能找到不錯的工作,薪水也可能高,但是不能成為一個大牛。

現在才開始講學習順序,雖然你說不要推薦書,不過我還是要用書來做順序。
C語言是可以寫很多核心和高級的東西,而不只是小東西,但是從你代碼來看,居然用到了 goto,我不是說你那些程序用到GOTO有什麼不好,而是一定要避免用GOTO,goto是錯誤之源,如果你有什麼內容非要用到goto才能寫到,說明你的編碼技巧還有不少提高空間。

你的學習順序應該是:
C:做一個超級馬里奧出來,並能夠讀取文本腳本來更新關卡。
C++:寫一個2D圖形引擎,封裝掉細節,實現面向對象設計和可復用設計,並且用到《設計模式》中提到的一些設計模式,這樣才能算對C++有一個很好的掌握。
MFC:MFC技術雖然近期已經冷下來了,但是你能熟練掌握它,才能證明你的C++OO技術夠純熟,嚴格證明你掌握了MFC很簡單,你只要用MFC做出一個殺毒引擎就差不多了。推薦的書有《深入淺出MFC》。
《Windows程序設計》:和MFC不同的是,用的是windows核心SDK,也就是API,這本書學完後,你才能從操作系統層面上算掌握了win32 平台下的機理(其實win64和win32大部分機理類似)。
C#:C#里集合了當代和前沿計算機科學里最先進的一些語法(雖然執行效率一直被人質疑),但是你學完C#並深入後,至少能夠算是對計算機語言有一個更加深刻的理解了。如何證明你C#學的不錯了?也很簡單,再次寫一個隨便什麼游戲,比如俄羅斯方塊。如果更加證明自己呢?用它寫一個P2P網路對戰游戲。

(如果你注意的話,會發現我說的學習順序都是沿著語言和某些技術的,為什麼呢?因為這些語言和技術涉及到特定的領域技術和計算機理論思想,比如學完了C#的話,就不單指學完了C#,而是把多種語言範式都學習了一遍,以及現代的程序開發思維(因為裡面用到了很多讓你一勞永逸的技術))

以上5個步驟都是基礎大步驟,要解決的話要沒1-2年應該不夠。
與此同時,要盡快選出文中你感興趣的方向作為3-5年的長期方向,不要擔心過早選擇分支方向會有什麼損失,因為計算機很多分支是相通的,只有你把分支方向深入進去,才能真正理解很多理論的實踐意義。並且一旦你在某個分支領域形成了較強的優勢(比如,到公司里只有你這方面最強),那麼你就是稀缺人才。

關於大方向的步驟就不說了,你主要就是要把我說的這幾個基礎步驟先解決,同時平時要注重大方向理論結合實際去編碼和開發。

E. 用C語言在windows或者Linux上面,編寫一個多線程程序

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
int *pt=(int*)lpParam;

printf("I am tread %d\r\n",*pt);
}
int main()
{
const int Count=4;
int datas[Count];
DWORD dwThreadId[Count];
HANDLE hThread[Count];
int i;

for(i=0;i<Count;i++)
{
datas[i]=i+1;
hThread[i]=CreateThread(NULL,0,ThreadProc,&datas[i],0,&dwThreadId[i]);
}
WaitForMultipleObjects(Count,hThread,TRUE,INFINITE);
for(i=0;i<Count;i++)
{
CloseHandle(hThread[i]);
}
system("PAUSE");
return EXIT_SUCCESS;
}

F. c語言windows下寫多線程的問題

printf("I am thread %d,my id is:",arg);

難道不是 printf("I am thread %d,my id is:",*arg);

unsigned pid;

G. C語言中 怎麼實現雙線程 或者 父子線程啊

運行一個程序,這個運行實體就是一個「進程」。

例如,用滑鼠雙擊IE瀏覽器的圖標,你運行了一個IE「進程」。第一個窗未關,你又用滑鼠雙擊IE瀏覽器的圖標,又出來一個瀏覽器的窗。這時,你運行了同一個程序的兩個進程。

對於自己寫的程序也如此。運行它,這個運行實體就是一個「進程」。同時運行兩個,就是兩個進程。計算機分別對兩個進程分配資源,直到進程結束,收回資源。

線程是進程里真真跑的線路,真真執行的運算,每個進程有一個主線程。進程里可以開第二第三條新的執行線路,gcc 用 pthread_create(),VC++ 用 CreateThread(), 這就叫雙線程和多線程。進程是線程的容器,同一進程的線程共享它們進程的資源。線程里建的線程就是父子線程。

兩個或多個進程協同工作時,需要互相交換信息,有些情況下進程間交換的少量信息,有些情況下進程間交換大批信息。這就要通訊。通訊方式不止一種。管道就是一種。VC++ 用 CreatePipe() 函數建立。

管道的實質是一個共享文件,可藉助於文件系統的機制實現,創建、打開、關閉和讀寫.

一個進程正在使用某個管道寫入或讀出數據時,另一個進程就必須等待. 發送者和接收者雙方必須知道對方是否存在,如果對方已經不存在,就沒有必要再發送信息.,發送信息和接收信息之間要協調,當寫進程把一定數量的數據寫入管道,就去睡眠等待,直到讀進程取走數據後,把它喚醒。

VC++ 線程例子:
#include <windows.h>
#include <iostream.h>

DWORD WINAPI fun1(LPVOID lp);
DWORD WINAPI fun2(LPVOID lp);
int piao=500;

int main()
{
HANDLE pthread1,pthread2;
pthread1=CreateThread(0,0,fun1,0,0,0);
pthread2=CreateThread(0,0,fun2,0,0,0);
CloseHandle(pthread1);
CloseHandle(pthread2);
Sleep(3000);
return 0;

}

DWORD WINAPI fun1(LPVOID lp)
{
while(1)
{

if(piao>0)
cout<< "thread-1-"<< piao--<<endl;
else
break;
}
return 0;
}

DWORD WINAPI fun2(LPVOID lp)
{
while(1)
{
if(piao>0)
cout<<"thread-2-"<<piao--<<endl;
else
break;
}
return 0;
}

===================================
建管道函數原形:
BOOL CreatePipe(
PHANDLE hReadPipe, // read handle
PHANDLE hWritePipe, // write handle
LPSECURITY_ATTRIBUTES lpPipeAttributes, // security attributes
DWORD nSize // pipe size
);

閱讀全文

與windows下c語言多線程編程相關的資料

熱點內容
CS編輯命令 瀏覽:947
程序員編碼是指什麼 瀏覽:525
在雲伺服器上安裝軟體 瀏覽:270
什麼app可以免費聽周董的歌 瀏覽:364
netmvcpdf 瀏覽:209
arp伺服器回送的是什麼地址 瀏覽:103
生物學pdf百度雲 瀏覽:963
markdown源碼包怎麼下載 瀏覽:598
餐飲app開發公司哪個好 瀏覽:637
解壓盒子2無廣告 瀏覽:623
華為鴻蒙系統怎麼放大單個文件夾 瀏覽:587
phpwin864 瀏覽:914
boll優化源碼公式 瀏覽:906
連接伺服器埠號是如何確定的 瀏覽:14
gsm源碼 瀏覽:475
單片機點陣滾動 瀏覽:407
加密資產平台 瀏覽:721
二級建築師pdf教材 瀏覽:324
單片機i和e系列 瀏覽:320
peb是什麼伺服器 瀏覽:389