c語言線程-ag真人国际官网
⑴ c語言怎麼寫線程代碼
通常使用createthread函數來創建新的線程.(unix下使用pthread_create函數)
首先指出,線程與線程之間,是並列關系,不會存在"父子線程"的概念.
在windows平台下,createthread函數包含在 windows.h 文件內,包含此文件即可正常使用.
以下為createthread函數的聲明:
handle createthread(
lpsecurity_attributes lpthreadattributes,//指向安全性屬性描述結構體的
//指針,通常可以忽略的.
size_t dwstacksize,//指定新線程初始的棧大小,若不關心,可以用0填充,來要求使用
//默認值
lpthread_start_routine lpstartaddress,//用來充當線程的函數的指針.
lpvoid lpparameter,//要傳遞給函數的參數,這個值本身就是那個參數,而不是參數的地址
dword dwcreationflags,//創建的方式,0表示正常,創建後立即開始運行
lpdword lpthreadid//用來接受函數反饋的線程id的指針.
);
用來充當新的線程的函數格式:
dword winapi threadproc(lpvoid);
createthread函數若成功了,返回新線程的句柄,若失敗了,則返回null.
若用create_suspended填充dwcreation flags則創建的線程先掛起來,並不直接開始運行,要用resumethread函數恢復線程,才能繼續運行.
⑵ c語言多線程的概念
線程:線程是程序中的一個執行流,每個線程都有自己的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不同的線程可以執行同樣的函數。
多線程:多線程是指程序中包含多個執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務,也就是說允許單個程序創建多個並行執行的線程來完成各自的任務。
c語言的開始設計,並未設計多線程的機制,由於隨著軟硬體的發展及需求的發展。後來c語言才開發了線程庫以支持多線程的操作、應用。
主要基於linux介紹c多線程。在編譯c的多線程時候,一方面必須指定linux c語言線程庫多線程庫pthread,才可以正確編譯(例如:gcc test.c -o test -lpthread);另一方面要包含有關線程頭文件#include
⑶ c語言如何創建線程(windows)系統中
下面為c語言調用win api實現創建線程:
1,導入
2,聲明實現方法dword winapi threadproc1( lpvoid lpparam ) {}
3,在main()方法中調用 createthread(null,0 ,threadproc1,null,0,null);
要注意的是主線程不能結束,如果主線程結束,則它的子線程也會被殺死。
#include
#include
#include
dword winapi threadproc1( lpvoid lpparam )
{
int i=0;
time_t timer;
while(1)
{
timer=time(null);
printf("the current time is: %s\n",asctime(localtime(&timer)));
sleep(1);
}
}
void main()
{
int i=0;
//讓主線程進入循環,主線程若退出,子線程1,2會被系統「殺死」
//創建線程1
createthread(
null, // default security attributes
0, // use default stack size
threadproc1, // thread function
null, // argument to thread function
0, // use default creation flags
null); // returns the thread identifier
for(;;)
{
;
}
}
⑷ c語言線程簡單例題
您好,這樣的:
通過pthread_join得到的終止狀態是不同的,總結如下:
1.如果thread線程通過return返回,rval_ptr所指向的單元里存放的是thread線程函數的返回值。
2. 如果thread線程被別的線程調用pthread_cancel異常終止掉,rval_ptr所指向的單元里存放的是常數pthread_canceled。
3.如果thread線程是自己調用pthread_exit終止的,rval_ptr所指向的單元存放的是傳給pthread_exit的參數。
⑸ c語言中怎樣創建多線程
/*這是我寫的最簡單的多線程程序,看懂不?*/
#include
#include
//#include
dword winapi threadproc1( lpvoid lpparam )
{
int i=0,j=0;
while(1)
{
printf("hello,this thread 1 ...\n");
//延時
for(i=0;i<200000000;i )
{
;
}
}
}
dword winapi threadproc2( lpvoid lpparam )
{
int i=0,j=0;
while(1)
{
printf("hello,this thread 2 ...\n");
//延時
for(i=0;i<200000000;i )
{
;
}
}
}
void main()
{
int i=0;
//創建線程1
createthread(
null, // default security attributes
0, // use default stack size
threadproc1, // thread function
null, // argument to thread function
0, // use default creation flags
null); // returns the thread identifier
//創建線程2
createthread(
null, // default security attributes
0, // use default stack size
threadproc2, // thread function
null, // argument to thread function
0, // use default creation flags
null); // returns the thread identifier
//讓主線程進入循環,主線程若退出,子線程1,2會被系統「殺死」
while(1)
{
printf("hello,this thread 0 ...\n");
//延時
for(i=0;i<200000000;i )
{;}
}
}
⑹ c語言怎麼創建線程和使用
進程的生命周期:
[1].創建 --- fork
[2].執行 --- a. exec
b.子進程實現代碼邏輯
[3].結束 --- exit _exit
僵屍態進程---wait waitpid
孤兒進程
--------------------------------------
進程存在的問題:
(1).進程的創建 --- 復制
(時間 和 空間的開銷很大)
(2).進程的運行 --- 調度-->
⑺ c語言實現多線程
目錄:
linux操作系統,c語言實現多線程
windows操作系統,c語言實現多線程
windows下的多線程(不帶停止)
linux操作系統,c語言實現多線程:
#include
#include
#include
void*threadone(void*threadarg)
{
printf("線程開始啦,參數是:%s ",(char*)threadarg);
returnnull;
}
intmain(void)
{
pthread_tthreadid;/*記錄線程標識符*/
void*waitingresult;/*等待線程退出的等待結果*/
interrorcode;/*記錄線程的錯誤代碼*/
char*amessage="這是線程的參數";
/*創建並啟動線程threadone。若返回值非零,則線程創建失敗*/
errorcode=pthread_create(&threadid,null,threadone,amessage);
if(errorcode!=0)
{
printf("線程threadone創建失敗。錯誤代碼:%d ",errorcode);
returnexit_failure;
}
/*等待線程標識符為的threadid的線程結束*/
errorcode=pthread_join(threadid,&waitingresult);
if(errorcode!=0)
{
printf("等待線程退出等待失敗。錯誤代碼:%d ",errorcode);
returnexit_failure;
}
printf("線程的返回值是%p ",waitingresult);
returnexit_success;
}
windows操作系統,c語言實現多線程:
#include
#include
dwordapientrythreadone(lpvoidthreadarg)
{
printf("線程開始啦,參數是:%s ",(char*)threadarg);
return0;
}
intmain(void)
{
handlehthread;/*記錄線程句柄*/
dwordthreadid;/*記錄線程id號*/
dwordwaitingresult;/*等待線程退出的等待結果*/
dwordthreadexitcode;/*記錄線程的返回值*/
char*amessage="這是線程的參數";
/*創建並啟動線程threadone,返回值為線程句柄,賦值給hthread*/
hthread=createthread(null,0l,threadone,(lpvoid)amessage,0l,&threadid);
if(hthread==null)
{
printf("線程threadone創建失敗。錯誤代碼:%lu ",getlasterror());
returnexit_failure;
}
/*等待線程句柄為的hthread線程結束*/
waitingresult=waitforsingleobject(hthread,infinite);
if(waitingresult==wait_failed)
{
printf("等待線程退出等待失敗。錯誤代碼:%lu ",getlasterror());
returnexit_failure;
}
if(getexitcodethread(hthread,&threadexitcode))
printf("線程的返回值是%lu ",threadexitcode);
else
printf("獲取線程的返回值獲取失敗。錯誤代碼:%lu ",getlasterror());
returnexit_success;
}
windows下的多線程:(不帶停止)
#include
#include
dwordwinapioxianchen(lpvoidlpparam);
intmain(intargc,char*argv[])
{
intnum=0;
createthread(null,null,oxianchen,&num,null,null);
while(1)
{
num ;
printf("主線程!d ",nu***eep(40);
}
return0;
}
dwordwinapioxianchen(lpvoidlpparam)
{
int*a=lpparam;
while(1)
{
*a;
printf("副線程!d0x%p ",*a,a);
sleep(80);
}
return0;
}
⑻ c語言有沒有線程
c語言當然可以控制線程咯_beginthread(,,)sleep()都是可以用的。
⑼ c語言多線程實現
你是想模擬多線程?還是想用win sdk寫多線程?
要是是winsdk 里的東西 看看孫鑫的 mfc 視頻就會有的,在第15章,是用winsdk編寫的。
⑽ c語言怎樣實現多線程
首先你要有控制蛇移動方向的全局變數(定義在main以外因為線程函數也要調用它,每次鍵盤輸入都會修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然後你在移動時應該是在while裡面操作的吧,你每移動一步前都讀一下direction這個變數的數值然後再控制移動方向(注意s這個鍵可以忽略因為不會倒著走) 然後你可以用pthread.h這個庫 例子是 pthread t;// 定義一個線程 pthread_create(&t, null, listen_keyboard_input, null);//建立線程執行listen_keyboard_input這個函數 這個線程執行的函數 void listen_keyboard_input(){ while(應該通過某個信號來退出這個循環,從而表示游戲結束){ direction =getchar(); } } 但是這里存在同步問題, 比如當這個線程的getchar()在給direction輔助的同時,你控制貪吃蛇移動的線程正在調用 direction的值來判斷下一個移動方向,這就會出問題,所以要加一個鎖,叫 mutex lock;這個也定義成全局變數可以使各線程共享。 pthread_mutex_t mutex; //定義一個鎖 pthread_mutex_init(&mutex, null, null);//初始化 然後把函數修改成 void listen_keyboard_input(){ while(應該通過某個信號來退出這個循環,從而表示游戲結束){ pthread_mutex_lock(&mutex); direction =getchar(); pthread_mutex_unlock(&mutex); } } 另外一個控制貪吃蛇移動的時候也要加鎖 while(.....){ char c; pthread_mutex_lock(&mutex); c = direction; pthread_mutex_unlock(&mutex); switch(c){ ................ } ................................... } 這樣就好了 注意你的控制貪吃蛇移動的部分也必須要放在另外一個pthread 裡面執行,如果放在主線程, 主線程會一直等listen_keyboard_input而什麼事都不會做 你把這兩個線程用 pthread_create 創建完成後 用 t1.join(); t2.join(); 就可以使這兩個線程並發執行了 如果你用的是linux 來編譯的,你再輸入gcc 指令後加上 -lpthread 就可以了 還有什麼不懂的你可以多找找 pthread 類的例子