為什麼這篇單執行緒多執行緒鄉民發文收入到精華區:因為在單執行緒多執行緒這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者englishman (葉師父)看板C_and_CPP標題[問題] C++多執行緒執行問題時間T...
單執行緒多執行緒 在 偶然?占心|感情合盤|催眠培訓|調頻療癒|AcBars Instagram 的最讚貼文
2021-09-24 14:14:34
半途而廢為什麼不行? 在過去我們因為教育觀念而學習到,半途而廢是不好的、是可恥的。放棄是會導致失敗的、不可以三分鐘熱度,這樣很糟糕~等等想法。如果堅持是一個美德,那中途放棄就變成一種社會道德及認知上的約束。 我在做療癒或是催眠個案時,大約有9成以上的案例都因為這樣的限制性信念,讓自己一直生活...
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10, i7 四核心處理器
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VS2015
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenCV
問題(Question):
各位先進大家好,我製作了一個透過WiFi傳輸讀取外部device傳來的影像然後即時顯示到
PC UI的程式,程式分為UI層及kernel層,kernel層是一個包成DLL函式,裡面有開執行緒
(可以設定開幾個執行緒),不斷地從kernel撈資料,然後透過callback方式傳到UI層即時
顯示。而為什麼撈資料要用多執行緒,是因為撈完資料後需要進行後處理,所以希望用多執
行緒的方式進行影像後處理,以免僅使用單執行緒後處理花太多時間卡頓畫面顯示。
測試後,我遇到的問題是,當我使用超過一個執行緒去跑的時候,畫面會有嚴重的卡頓,可是
當我在執行緒執行的loop裡面加入"printf()"函式,畫面就變得流暢多了??想請教先進有
甚麼多執行緒在設計的時候CPU資源方面我沒注意到的嗎?還是其他問題?? 十分感謝!!
餵入的資料(Input):
影像資料, 更新率大約8張/秒
預期的正確結果(Expected Output):
多執行緒抓取WiFi資料資料後能夠流暢地即時顯示在 UI
錯誤結果(Wrong Output):
沒有加入printf(),畫面卡頓,有加了printf(),畫面變流暢
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
class ThreadFunc
{
public:
HANDLE hThread;
bool bExitThread;
DWORD dwThreadID;
unsigned char uchNo;
bool bIsRunning;
public:
ThreadFunc(HANDLE _hThread, bool _bExitThread, DWORD _dwThreadID,
unsigned char _uchNo, bool _bIsRunning) : hThread(_hThread),bExitThread
(_bExitThread), dwThreadID(_dwThreadID), uchNo(_uchNo), bIsRunning
(_bIsRunning) {}
ThreadFunc() { }
~ThreadFunc(){ }
void LoopCycle();
static DWORD WINAPI CoreThread(void* Param)
{
ThreadFunc* This = (ThreadFunc*)Param;
This->ThreadStart();
return NULL;
}
void Start()
{
hThread = CreateThread(NULL, 0, CoreThread, (void*) this, 0,
&dwThreadID);
}
void Exit()
{
if (hThread)
{
bExitThread = true;
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
hThread = NULL;
}
}
DWORD ThreadStart(void)
{
while (!bExitThread)
{
LoopCycle(); // 不斷地去撈影像資料並做後處理
printf("Thread No. is %d\n\n", uchNo); // 有加這一行,
//程式會順很多;沒有這一
//行會卡頓
}
return 0;
}
};
ThreadFunc* g_pcThreadFunc = new ThreadFunc[4]; // 開 > 1 個執行緒, 假設
// 4 個
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.33.136
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1536806302.A.E19.html
※ 編輯: englishman (122.116.33.136), 09/13/2018 10:42:12