static void on_mail(kn_thread_mailbox_t *from,void *mail){ mysql_request_t request = (mysql_request_t)mail; do{ int ret =mysql_real_query(mysqlConn->mysqlConn,request->req,request->len); if(ret == 0){ printf("success\n"); break; }else{ ret = mysql_errno(mysqlConn->mysqlConn); if (ret == 2013 || ret == 2006 ||ret == 2003) { // 2013CR_SERVER_LOST 2006 (CR_SERVER_GONE_ERROR) 2003 CR_CONN_HOST_ERROR int count = 0; while (!mysqlReconnect(mysqlConn->mysqlConn)) { if (++count > MAX_RECONN_COUNT) { mysqlConn->error = ret; kn_stop_engine(mysqlConn->engine); return; } kn_sleepms(1000); } } else{ printf("sql error:%d\n",ret); break; } } }while(1); }
int main(){ kn_thread_t t1 = kn_create_thread(THREAD_JOINABLE); kn_thread_t t2 = kn_create_thread(THREAD_JOINABLE); kn_thread_start_wait(t1,routine11,NULL); kn_thread_start_wait(t2,routine22,NULL); while(1){ kn_sleepms(1000); } return 0; }
int main(){ kn_thread_t t1 = kn_create_thread(THREAD_JOINABLE); kn_thread_t t2 = kn_create_thread(THREAD_JOINABLE); //kn_thread_t t3 = kn_create_thread(THREAD_JOINABLE); channel1 = kn_new_channel(kn_thread_getid(t1)); channel2 = kn_new_channel(kn_thread_getid(t2)); kn_thread_start_run(t1,routine1,NULL); kn_thread_start_run(t2,routine2,NULL); //kn_thread_start_run(t3,routine2,NULL); while(1){ kn_sleepms(100); } return 0; }
void *routine1(void *arg) { printf("routine1\n"); int i = 0; kn_msgque_writer_t writer = kn_open_writer(msgque); while(1){ for(i = 0; i < 10000000; ++i){ kn_msgque_write(writer,(void*)1,NULL); } kn_msgque_flush(writer); kn_sleepms(1); } return NULL; }
//单向 void *routine11(void *arg) { printf("routine11\n"); while(is_empty_ident(mailbox2)){ FENCE(); kn_sleepms(1); } int i; while(1){ for(i = 0; i < 50000; ++i){ kn_send_mail(mailbox2,(void*)1,NULL); } //kn_sleepms(100); } return NULL; }
void *routine1(void *arg) { printf("routine1\n"); engine_t p = kn_new_engine(); kn_setup_mailbox(p,on_mail1); while(is_empty_ident(mailbox2)){ FENCE(); kn_sleepms(1); } int i = 0; for(; i < 10000; ++i){ kn_send_mail(mailbox2,(void*)1,NULL); } kn_engine_run(p); return NULL; }
//单向 void *routine11(void *arg) { printf("routine11\n"); while(!pid)kn_sleepms(1); kn_thread_mailbox_t mailbox = kn_query_mailbox(pid); if(is_empty_ident((ident)mailbox)){ printf("error\n"); exit(0); } int i; while(1){ for(i = 0; i < 50000; ++i){ kn_send_mail(mailbox,(void*)1,NULL); } //kn_sleepms(100); } return NULL; }
void *routine1(void *arg) { printf("routine1\n"); engine_t p = kn_new_engine(); kn_setup_mailbox(p,on_mail1); while(!pid)kn_sleepms(1); kn_thread_mailbox_t mailbox = kn_query_mailbox(pid); if(is_empty_ident((ident)mailbox)){ printf("error\n"); exit(0); } int i = 0; for(; i < 10000; ++i){ kn_send_mail(mailbox,(void*)1,NULL); } kn_engine_run(p); return NULL; }
int main(){ msgque = kn_new_msgque(32); kn_thread_t t1 = kn_create_thread(THREAD_JOINABLE); kn_thread_t t2 = kn_create_thread(THREAD_JOINABLE); kn_thread_start_run(t1,routine1,NULL); kn_thread_start_run(t2,routine2,NULL); uint64_t tick,now; tick = now = kn_systemms64(); while(1){ kn_sleepms(100); now = kn_systemms64(); if(now - tick > 1000) { uint32_t elapse = (uint32_t)(now-tick); printf("count:%d\n",count/elapse*1000); tick = now; count = 0; } } return 0; }