影音先锋男人资源av站_狠狠色综合激情丁香五月_爱爱爱爱看视频_在线播放免费人成视频在线观看_少妇人妻综合久久中文字幕_国产午夜无码精品免费看_久久久久久夜精品精品免费啦_男人女人午夜视频免费_日本xxxx裸体xxxx_丰满人妻熟妇乱又仑精品

電子科大論壇-非清水河畔

標(biāo)題: 如何在程序中開(kāi)線程(c/c++) [打印本頁(yè)]

作者: 重新來(lái)過(guò)    時(shí)間: 2006-4-25 12:50
標(biāo)題: 如何在程序中開(kāi)線程(c/c++)
近來(lái)一朋友問(wèn)我,他做了個(gè)點(diǎn)對(duì)點(diǎn)通信的小程序,可是不知道如何處理軟件偵聽(tīng)以及接受信息的問(wèn)題?
最簡(jiǎn)單的方法是開(kāi)線程,可是朋友問(wèn)我,可不可以用time事件來(lái)控制? 我的回答如下
    可以用時(shí)間事件來(lái)控制,不過(guò)會(huì)有問(wèn)題出現(xiàn):
1此時(shí)程序只有一個(gè)主線程 ,當(dāng)程序處于偵聽(tīng)狀態(tài)時(shí)accept(我把listen 和 accept 統(tǒng)稱為偵聽(tīng)狀態(tài)),
如果沒(méi)有客戶端發(fā)來(lái)連接請(qǐng)求,此時(shí)程序?qū)⑻幱诘却隣顟B(tài)(掛起/suspend),同時(shí)時(shí)間事件的另外一個(gè)屬性是他每隔一定時(shí)間就促發(fā)一次本身事件,不管先前的事件是否“死亡”,這樣將耗費(fèi)大量的系統(tǒng)資源。
2做一個(gè)一個(gè)軟件的目的就是賺錢,客戶使用軟件時(shí)候想到的是簡(jiǎn)單易用,如果使用時(shí)間控制時(shí),程序的控制權(quán)將在
時(shí)間事件的手中,如果此時(shí)因?yàn)闆](méi)有客戶端來(lái)進(jìn)行連接,那么該事件將掛起,用戶不能對(duì)軟件有任何操作。會(huì)給用戶一種錯(cuò)覺(jué)。多的就不說(shuō)了
    朋友問(wèn)我怎樣開(kāi)線程
1利用mfc以及win32API 函數(shù)來(lái)做
  CWinThread 類 以及 AfxBeginThread
至于這些代碼改寫在程序里的什么地方,我不想多說(shuō)。如果不知道建議大家在學(xué)習(xí)win32編程,再看MFC編程
首先創(chuàng)建 線程實(shí)例 如下
  CWinThread * Thread_Listen ;
定義線程實(shí)體函數(shù)(讓線程做什么)
UINT funThread_Linten(LPVOID param);
啟動(dòng)線程
Thread_Listen  = AfxBeginThread(funThread_Linten,this);

Thread_Listen的用途???
先說(shuō)如何寫 funThread_Linten 函數(shù)
在這個(gè)函數(shù)里面我們作一些我們想讓線程作的事(這句話有點(diǎn)拗口)
但是有點(diǎn)得注意!程序是順序執(zhí)行的,他不能自己控制自己不停的重副運(yùn)行
怎么辦 我們就用到了Thread_Listen
UINT funThread_Linten(LPVOID param)
{
    // Todo something
   // 注意線面的代碼
Thread_Listen = AfxBeginThread(funThread_Linten,xxx);
}
上面的代碼中我們沒(méi)有使用this參數(shù),使用了xxx為什么??
因?yàn)楹瘮?shù)funThread_Linten不是主程序的成員函數(shù),那我們通過(guò)什么來(lái)標(biāo)志線程屬于誰(shuí)呢
參數(shù)param 就是我們剛開(kāi)線程是傳進(jìn)來(lái)的參數(shù)this,但是他的類型時(shí)LPVOID我們可以根據(jù)需要進(jìn)行轉(zhuǎn)遍
That's over




歡迎光臨 電子科大論壇-非清水河畔 (http://www.hallmarkedu.com/) Powered by Discuz! X3.4