pro c初學2 簡單多執行緒例子

2021-04-24 16:19:00 字數 2117 閱讀 6428

/** name: proc_mul.pc

* 預編譯條件: mode=oracle parse=full

* 利用多執行緒,更新表中記錄;每個執行緒擁有單獨的上下文環境

* 表結構: create table accounts (account number(36), balance(36,2))

*/#include

#include

#include

#include

#include

#define conninfo "test/test"

#define threads 3

dword winapi do_transaction();         // 處理交易

void get_transaction();        // 獲得記錄

void logon();

void logoff();

void err_report();             // 錯誤處理

/** 記錄執行緒id和執行時上下文的結構

*/struct parameters

;typedef struct parameters parameters;

struct record_log

;typedef struct record_log record_log;

/**待更新資料記錄**/

record_log records = ,,,

,,,,

,};static unsigned int trx_nr = 0;

static unsigned int flag_over = 0;

handle hmutex;      // 定義互斥物件

/********主函式*************/

void main()

/*建立互斥物件*/

hmutex = createmutex(null, false, "trx_nr");

if(hmutex)

}/*建立執行緒*/

for(i = 0; i < threads; i++)

/******利用乙個全域性變數判斷所有執行緒是否結束********/

while(flag_over != threads)

/***************有問題待查***************

//關閉執行緒及資料庫連線

for(i = 0; i < threads; i++)

}**************************************/}/*

* 資料處理函式,一次處理recors中的一條記錄

* recors記錄通過get_transaction()函式管理

*/dword winapi do_transaction(parameters *params)

exec sql commit;         // 事務提交

sleep(2000);

}/*執行緒結束,關閉資料庫連線*/

printf("transaction finished, thread %d terminated/n", params->thread_id);

printf("stop session %d.../n", params->thread_id);

logoff(ctx);

exec sql context free :ctx;          // 釋放記憶體

flag_over++;

return 0;}/*

* 管理recors記錄,控制併發

*/void get_transaction(record_log **trx)

/** 連線資料庫

*/void logon(sql_context ctx, char *connect_info)

/** 斷開資料庫連線

*/void logoff(sql_context ctx)

/** 錯誤處理函式

*/void err_report(struct sqlca sqlca)

}在vc6.0環境下除錯沒問題,執行結果也正常。不過控制台的輸出比較奇怪,有時候亂七八糟的,似乎在執行printf函式的時候出現了寫問題,查了很久也不知道為什麼。

Pro C 簡單例子

include exec sql begin declare section char userid 11 hr oracle char std name 10 int std number int dept number exec sql end declare section char temp...

PROC的多執行緒

在main中進行context的初始化 include include include include include include include typedef unsigned winapi pbeginthreadex threadfunc lpvoid lpthreadparameter...

初學多執行緒

nsthread 建立多執行緒的方法有很多種,這裡只說兩種 可以獲取執行緒物件,給執行緒設定名稱等 建立多執行緒 nsthread thread nsthread alloc initwithtarget self selector selector textthread object nil 啟動...