redis 多執行緒 取消訂閱 頻道

2021-09-28 17:33:09 字數 1999 閱讀 4117

//問題1,呼叫exit 返回0,但無法立刻退出dispatch,(必須等待收到新的channel推送才能退出)

ret=event_base_loopexit(base,null);

//問題2,呼叫exit 返回0,呼叫loopbreak,始終返回-1,無法退出dispath(必須等待收到新的channel推送才能退出)

ret=event_base_loopexit(base,null);

ret=event_base_loopbreak(base);

//解決方法,在呼叫 event_base_new()前使用evthread_use_pthreads(),並且呼叫event_base_loopbreak退出,

evthread_use_pthreads();//不加此句,多執行緒下loopbreak返回-1

base = event_base_new();

......

ret=event_base_loopexit(base,null);

ret=event_base_loopbreak(base);//不加此句,如果沒有新訊息推送,無法退出dispatch

#include "hiredis.h"

#include "stdio.h"

#include "constdefine.h"

#include #include #include #include #include //

//#include #include //#include #include #include "hiredis/hiredis.h"

#include "hiredis/async.h"

#include "hiredis/adapters/libevent.h"

rediscontext * m_context;

int m_port;

char m_serverip[100];

struct event_base *base;

redisasynccontext *c;

bool eventflag;

void onmessage(redisasynccontext *c, void *reply, void *privdata)

}}void * test_sub(void * args)

// usleep(1000);

//}//redisasyncdisconnect(c);

//redisasyncfree(c);

printf("exit sub\n");

return 0;}

bool threadrun(uint64_t &handle)

if (c->err)

redislibeventattach(c, base);

redisasynccommand(c, onmessage, null, "subscribe channel1");

//引數依次是:建立的執行緒id,執行緒引數,呼叫的函式,傳入的函式引數

int ret = 0;

ret = pthread_create(&tids, null, test_sub, null);

//event_base_loopexit(base, 10);

//test_sub(0);

if(ret != 0)

handle = tids;

return true;

}bool threadclose(uint64_t &handle)

printf("event_base_loopbreak %d\n", ret);

event_base_free(base);

base = null;

}return true;}

int main(int argc, char **ar**)

if ((count % 100) == 30)

}return 0;

}

多執行緒程式設計之執行緒取消

關鍵 pthread cancel函式傳送 終止訊號 pthread setcancelstate函式 設定終止方式 pthread testcancel函式取消執行緒 另一功能是 設定取消點 1 執行緒取消的定義 一般情況下,執行緒在其主體函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行...

ROS多執行緒訂閱訊息

對於一些只訂閱乙個話題的簡單節點來說,我們使用ros spin 進入接收迴圈,每當有訂閱的話題發布時,進入 函式接收和處理訊息資料。但是更多的時候,乙個節點往往要接收和處理不同 的資料,並且這些資料的產生頻率也各不相同,當我們在乙個 函式裡耗費太多時間時,會導致其他 函式被阻塞,導致資料丟失。這種場...

多執行緒程式設計 任務取消,中斷

執行緒中斷是乙個協作機制,乙個執行緒給另外乙個執行緒傳送訊號 signal 通知它在方便和可能的情況下,停止正在做的事情,去做其他事情。使用中斷來處理取消之外的任何任務都是不可取的。thread 包含乙個靜態巢狀類,thread.state 阻塞庫函式 監測執行緒何時被中斷,並提前返回。如果監測到中...