日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5.3多线程条件变量

發布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.3多线程条件变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

多線程條件變量應用例子

?

?

Input_manager.h

InputOpr 結構體添加

?

進程 ID :pthread_t t_TreadID;

?

int AllInputDevicesInit(void) {PT_InputOpr ptTmp = g_ptInputOprHead;int iError = -1;while (ptTmp){if (0 == ptTmp->DeviceInit()){/* 創建子線程 */pthread_create(&ptTmp->t_TreadID, NULL,InputEventThreadFunction, ptTmp->GetInputEvent);/* 最后一個參數是給 InputEventThreadFunction用的*/iError = 0;}ptTmp = ptTmp->ptNext;}return iError; }

?

/* 線程函數 */ static void* InputEventThreadFunction(void *pVoid) {T_InputEvent tInputEvent;/* 定義函數指針 */int (*GetInputEvent)(PT_InputEvent ptInputEvent);/* 讓這個函數指針指向 輸入參數*/GetInputEvent = (int (*)(PT_InputEvent))pVoid;while(1){if(0 == GetInputEvent(&tInputEvent)){/* 有數據變化,喚醒主進程,把tInputEvent的值傳給一個全局變量 *//* 訪問臨界資源前先獲得互斥變量 */pthread_mutex_lock(&g_tmutex);/* 原子方法賦值 */g_tInputEvent = tInputEvent;/* 喚醒主線程 */pthread_cond_signal(&g_tcondvar);/* 釋放互斥變量 */pthread_mutex_unlock(&g_tmutex);}}return NULL;}

?

int GetInputEvent(PT_InputEvent ptInputEvent) {/* 休眠 */pthread_mutex_lock(&g_tmutex);/* 條件等待函數 */pthread_cond_wait(&g_tcondvar, &g_tmutex);/* 程序能夠向下繼續證明被喚醒啦 *//* 被喚醒之后返回數據 */*ptInputEvent = g_tInputEvent;pthread_mutex_unlock(&g_tmutex);return 0; }

?

Makefile 添加線程庫 –lpthread

LDFLAGS := -lm -lfreetype -lts –lpthread

?

g_tTSDev = ts_open(pcTSName, 0);? /* 以阻塞方式打開 */

其實就是兩個輸入方式都以循環方式等待有數據變化,然后喚醒主線程處理

?

改為滑動翻頁

只需修改一個函數即可

?

static int TouchScreenGetInputEvent(PT_InputEvent ptInputEvent) {struct ts_sample tSamp;struct ts_sample tSampPressed;struct ts_sample tSampReleased;int iRet;int bStart = 0;int iDelta;static struct timeval tPreTime;while(1){iRet = ts_read(g_tTSDev, &tSamp, 1); /* 如果無數據則休眠 */if(1 == iRet){if ((tSamp.pressure > 0) && (bStart == 0)){tSampPressed = tSamp;bStart = 1;}if (tSamp.pressure <= 0){tSampReleased = tSamp;//bStart = 0;/* 處理數據 */if(!bStart){return -1;}else{iDelta = tSampReleased.x - tSampPressed.x;ptInputEvent->tTime = tSampReleased.tv;ptInputEvent->iType = INPUT_TYPE_TOUCHSCREEN;if (iDelta > giXres/5){/* 翻到上一頁 */ ptInputEvent->iVal = INPUT_VALUE_UP;}else if (iDelta < 0 - giXres/5){/* 翻到下一頁 */ptInputEvent->iVal = INPUT_VALUE_DOWN;}else{ptInputEvent->iVal = INPUT_VALUE_UNKNOWN;}return 0;}} }else{return -1;}}return 0; }

轉載于:https://www.cnblogs.com/CZM-/p/5367565.html

總結

以上是生活随笔為你收集整理的5.3多线程条件变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。