//問題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 阻塞庫函式 監測執行緒何時被中斷,並提前返回。如果監測到中...