c語言實(shí)現(xiàn)線程函數(shù),c語言程序函數(shù)

C語言多線程實(shí)現(xiàn)

多線程隨機(jī)選號(hào)程序

10年積累的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有黑山免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

以下程序運(yùn)行后看起來比較有意思,像一個(gè)隨機(jī)選號(hào)程序,但不是完全按照問題所說的寫的 可供參考,要改很容易

//多線程隨機(jī)選號(hào)程序示例

#include stdio.h

#include Windows.h

#include ctime

#include cstdlib

#include process.h

bool g_run = true; //是否運(yùn)行

void userInput(void*) //監(jiān)視輸入的線程函數(shù)

{

while (true)

{

if (getchar()=='\n') //是否輸入回車

{

g_run = !g_run; //回車運(yùn)行 回車暫停

}

Sleep(10); //延遲

}

}

int main()

{

srand(time(0)); //隨機(jī)數(shù)種子

_beginthread(userInput,0,NULL); //開線程

while (true)

{

if (g_run)

{

system("cls"); //清屏

int t = rand() % 1000+ 1;//1-1000的隨機(jī)數(shù)

printf("\n %d",t); //輸出

}

Sleep(50); //延遲50毫秒

}

return 0;

}

C語言如何實(shí)現(xiàn)多線程同時(shí)運(yùn)行

1、點(diǎn)擊菜單欄的“Project”選項(xiàng)卡,下拉列表的最后一項(xiàng)“Project options...”是對(duì)當(dāng)前工程的的屬性進(jìn)行設(shè)置的。

2、選擇彈出對(duì)話框中的“Compiler”選項(xiàng)卡。

3、將其中的“Runtime Library”的選擇改為“Multithreaded (LIB)”。

4、將看到對(duì)話框最下面的文本框中發(fā)生了一些變化,新增了“-MT”選項(xiàng),這與編譯器一開始所報(bào)的錯(cuò)誤提示給出的解決方案一致。

5、頁面的設(shè)置完成后,再對(duì)該源碼進(jìn)行編譯時(shí),就能愉快地看到編譯完全成功。

C語言怎么寫線程代碼

通常使用CreateThread函數(shù)來創(chuàng)建新的線程.(Unix下使用pthread_create函數(shù))

首先指出,線程與線程之間,是并列關(guān)系,不會(huì)存在"父子線程"的概念.

在Windows平臺(tái)下,CreateThread函數(shù)包含在 Windows.h 文件內(nèi),包含此文件即可正常使用.

以下為CreateThread函數(shù)的聲明:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向安全性屬性描述結(jié)構(gòu)體的

//指針,通??梢院雎缘?

SIZE_T dwStackSize,//指定新線程初始的棧大小,若不關(guān)心,可以用0填充,來要求使用

//默認(rèn)值

LPTHREAD_START_ROUTINE lpStartAddress,//用來充當(dāng)線程的函數(shù)的指針.

LPVOID lpParameter,//要傳遞給函數(shù)的參數(shù),這個(gè)值本身就是那個(gè)參數(shù),而不是參數(shù)的地址

DWORD dwCreationFlags,//創(chuàng)建的方式,0表示正常,創(chuàng)建后立即開始運(yùn)行

LPDWORD lpThreadId//用來接受函數(shù)反饋的線程ID的指針.

);

用來充當(dāng)新的線程的函數(shù)格式:

DWORD WINAPI ThreadProc(LPVOID);

CreateThread函數(shù)若成功了,返回新線程的句柄,若失敗了,則返回NULL.

若用CREATE_SUSPENDED填充dwCreation Flags則創(chuàng)建的線程先掛起來,并不直接開始運(yùn)行,要用ResumeThread函數(shù)恢復(fù)線程,才能繼續(xù)運(yùn)行.

C語言怎樣實(shí)現(xiàn)多線程?

首先你要有控制蛇移動(dòng)方向的全局變量(定義在main以外因?yàn)榫€程函數(shù)也要調(diào)用它,每次鍵盤輸入都會(huì)修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你在移動(dòng)時(shí)應(yīng)該是在while里面操作的吧,你每移動(dòng)一步前都讀一下direction這個(gè)變量的數(shù)值然后再控制移動(dòng)方向(注意s這個(gè)鍵可以忽略因?yàn)椴粫?huì)倒著走) 然后你可以用pthread.h這個(gè)庫 例子是 pthread t;// 定義一個(gè)線程 pthread_create(t, null, listen_keyboard_input, null);//建立線程執(zhí)行l(wèi)isten_keyboard_input這個(gè)函數(shù) 這個(gè)線程執(zhí)行的函數(shù) void listen_keyboard_input(){ while(應(yīng)該通過某個(gè)信號(hào)來退出這個(gè)循環(huán),從而表示游戲結(jié)束){ direction =getchar(); } } 但是這里存在同步問題, 比如當(dāng)這個(gè)線程的getchar()在給direction輔助的同時(shí),你控制貪吃蛇移動(dòng)的線程正在調(diào)用 direction的值來判斷下一個(gè)移動(dòng)方向,這就會(huì)出問題,所以要加一個(gè)鎖,叫 mutex lock;這個(gè)也定義成全局變量可以使各線程共享。 pthread_mutex_t mutex; //定義一個(gè)鎖 pthread_mutex_init(mutex, null, null);//初始化 然后把函數(shù)修改成 void listen_keyboard_input(){ while(應(yīng)該通過某個(gè)信號(hào)來退出這個(gè)循環(huán),從而表示游戲結(jié)束){ pthread_mutex_lock(mutex); direction =getchar(); pthread_mutex_unlock(mutex); } } 另外一個(gè)控制貪吃蛇移動(dòng)的時(shí)候也要加鎖 while(.....){ char c; pthread_mutex_lock(mutex); c = direction; pthread_mutex_unlock(mutex); switch(c){ ................ } ................................... } 這樣就好了 注意你的控制貪吃蛇移動(dòng)的部分也必須要放在另外一個(gè)pthread 里面執(zhí)行,如果放在主線程, 主線程會(huì)一直等listen_keyboard_input而什么事都不會(huì)做 你把這兩個(gè)線程用 pthread_create 創(chuàng)建完成后 用 t1.join(); t2.join(); 就可以使這兩個(gè)線程并發(fā)執(zhí)行了 如果你用的是linux 來編譯的,你再輸入gcc 指令后加上 -lpthread 就可以了 還有什么不懂的你可以多找找 pthread 類的例子

新聞標(biāo)題:c語言實(shí)現(xiàn)線程函數(shù),c語言程序函數(shù)
轉(zhuǎn)載注明:http://www.muchs.cn/article16/hssigg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、電子商務(wù)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)