2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
#include <windows.h>
typedef HANDLE HSEMAPHORE;
#define P(hHandle) ::WaitForSingleObject(hHandle, INFINITE)
#define V(hHandle) ::ReleaseSemaphore(hHandle, 1, NULL)
#define Semaphore(lInitial, lMaximum) ::CreateSemaphore(NULL, lInitial, lMaximum, NULL)
#define Thread(lpProc, lpParam) ::CreateThread(NULL, 0, lpProc, (LPVOID)lpParam, 0, NULL)
#define Wait(nCount, lpHandles) ::WaitForMultipleObjects(nCount, lpHandles, TRUE, INFINITE)
HSEMAPHORE n = Semaphore(0, 1);
HSEMAPHORE s = Semaphore(1, 1);
HSEMAPHORE e = Semaphore(100, 100);
UINT count = 0;
void Produce()
void Consume()
DWORD WINAPI Producer(LPVOID lpParameter)
{
while (true)
{
Produce();
P(e);
P(s);
count++;
printf("Producer: %d\n", count);
V(s);
V(n);
}
return 0;
}
DWORD WINAPI Consumer(LPVOID lpParameter)
{
while (true)
{
P(n);
P(s);
count--;
printf("Consumer: %d\n", count);
V(s);
V(e);
Consume();
}
return 0;
}
int main()
{
HANDLE hThreads[2];
hThreads[0] = Thread(Producer, (LPVOID)NULL);
hThreads[1] = Thread(Consumer, (LPVOID)NULL);
Wait(2, hThreads);
return 0;
}

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先,你要有一個(gè)概念,多線程只是在有CPU空閑的程序中實(shí)現(xiàn)多個(gè)線程并行,從而使程序顯得更”流暢“。多線程并不會(huì)讓你的CPU運(yùn)算能力得到提高。
你的程序,或許可以用雙線程:
一個(gè)線程捕捉圖像,一個(gè)線程處理數(shù)據(jù)。但要記住兩點(diǎn):
1,兩個(gè)線程間要加緩存
2,當(dāng)緩存已經(jīng)滿了的時(shí)候,捕捉線程應(yīng)該要等處理數(shù)據(jù)的線程處理完緩存才繼續(xù)捕捉。
因此,并不能保證你用了雙線程就會(huì)更加流暢,要你的的電腦運(yùn)算能力。和捕捉圖像的數(shù)據(jù)大小。
- 2 回答
- 0 關(guān)注
- 326 瀏覽
添加回答
舉報(bào)