2 回答

TA貢獻1824條經驗 獲得超6個贊
#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貢獻1812條經驗 獲得超5個贊
首先,你要有一個概念,多線程只是在有CPU空閑的程序中實現多個線程并行,從而使程序顯得更”流暢“。多線程并不會讓你的CPU運算能力得到提高。
你的程序,或許可以用雙線程:
一個線程捕捉圖像,一個線程處理數據。但要記住兩點:
1,兩個線程間要加緩存
2,當緩存已經滿了的時候,捕捉線程應該要等處理數據的線程處理完緩存才繼續捕捉。
因此,并不能保證你用了雙線程就會更加流暢,要你的的電腦運算能力。和捕捉圖像的數據大小。
- 2 回答
- 0 關注
- 315 瀏覽
添加回答
舉報