请教:MFC多线程数据库编程ado,数据库访问冲突。 ado多线程控制数据库,多线程作数据库,为什么出很多莫名其妙...

\u8bf7\u6559\uff0c\u5982\u4f55\u5728\u591a\u7ebf\u7a0b\u4e2d\u4f7f\u7528ado\u8bbf\u95ee\u6570\u636e\u5e93\u5462\uff08\u7a7a\uff09

\u4e00\u5b9a\u8bb0\u4f4f\u5728\u6bcf\u4e2a\u5b50\u7ebf\u7a0b\u90fd\u8981\u4f7f\u7528CoInitializeEx(nil, COINIT_MULTITHREADED);\u6765\u521d\u59cb\u5316\u7ebf\u7a0b\u5185\u7684com\u5bf9\u8c61\u3002\u8bb0\u4f4f\u5148\u8981uses ActiveX\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u4f7f\u7528CoInitialize(nil)\u6765\u521d\u59cb\u5316

\u6bcf\u4e2a\u7ebf\u7a0b\u5728\u4f7f\u7528COM\u7ec4\u4ef6\u4e4b\u524d\u90fd\u5fc5\u987b\u58f0\u660e\u5b83\u7684 \u5957\u95f4\u7c7b\u578b \uff0c\u5373\u5728\u6bcf\u4e2a\u7ebf\u7a0b\u4f7f\u7528\u7ec4\u4ef6\u5bf9\u8c61\u4e4b\u524d\u90fd\u8981\u8c03\u7528CoInitialize\uff0c\u5e76\u5728\u9000\u51fa\u4e4b\u524d\u8c03\u7528CoUninitialize\u3002LZ\u7684\u7a0b\u5e8f\u6ca1\u6709\u8c03\u7528\uff0c\u5bf9\u8c61\u6839\u672c\u5c31\u6ca1\u6709\u521b\u5efa\u51fa\u6765\uff0c\u7ee7\u7eed\u8fd0\u884c\u5c31\u4f1a\u8bbf\u95ee0\u6307\u9488\uff0c\u5f53\u7136\u4f1a\u975e\u6cd5\u64cd\u4f5c\u4e86\u3002\u6211\u4e0d\u660e\u767dLZ\u8bf4\u6ce8\u91ca\u6389\u90e8\u5206\u4ee3\u7801\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\u662f\u600e\u4e48\u56de\u4e8b\u3002

用多线程同步技术,即一个线程将要取得数据区锁定,另一个线程此时不能存取此块的数据。
看看多线程同步的书。

例如:
void CCalibPage1::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
UpdateData();

m_nCounter++;

double r;

CSingleLock sLock(&(gpMainFrm->m_mutex));
sLock.Lock();//此处锁定
double v = gSpindleRevolution;
sLock.Unlock();//存取后释放。

if(m_bCalibStart)
{
r = m_CalibValue/v;

m_szTestValue0.Format("%f",v);
// m_szTestValue.Format("%f", (v * r));
m_szRatio.Format("%f", r);//
UpdateData(false);
}
else if(m_bVerify)
{
m_szTestValue.Format("%f",v*gcConfig.calib[PCL833_CHANNEL].ratio);
UpdateData(false);
}

if(m_nCounter > 30)
{
KillTimer(11);
m_bCalibStart = false;
m_bVerify = false;
MessageBox(_T("标定完成!"),_T("CNCTest"));
UpdateButtonStatus();
}

CPropertyPage::OnTimer(nIDEvent);
}

参见:
http://baike.baidu.com/view/2808915.htm

声明一个全局的数据库db对象,在进程初始化后就初始化该对象,并和数据库建立连接。主线程和子线程都用该对象操作数据库。

DWORD MyDlg::TimerThreadFunc(LPVOID lpParam)
{
HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);

LARGE_INTEGER liDueTime;
liDueTime.QuadPart=-300000000;

//Sleep(3000);

SetWaitableTimer(hTimer, &liDueTime, 10000, TimerAPCRoutine, pDlg, FALSE)

while(1)
{
SleepEx(INFINITE, TRUE);
}

CloseHandle(hTimer);
}

这个问题也困扰了我好久,进来标记一下先.呵呵。

hghgh.......................

  • 璇锋暀:MFC澶氱嚎绋嬫暟鎹簱缂栫▼ado,鏁版嵁搴撹闂啿绐併
    绛旓細鐢澶氱嚎绋鍚屾鎶鏈紝鍗充竴涓嚎绋嬪皢瑕佸彇寰鏁版嵁鍖洪攣瀹氾紝鍙︿竴涓嚎绋嬫鏃朵笉鑳藉瓨鍙栨鍧楃殑鏁版嵁銆傜湅鐪嬪绾跨▼鍚屾鐨勪功銆備緥濡傦細void CCalibPage1::OnTimer(UINT nIDEvent){ // TODO: Add your message handler code here and/or call default UpdateData();m_nCounter++;double r;CSingleLock sLock(&(gpMainFr...
  • MFC澶氱嚎绋鐨勫疄鐜
    绛旓細MFC浣跨敤鐨則hread鏈缁堥兘鏄皟鐢╳indows鐨凙PI鍑芥暟锛屼綘鐨勮繖涓兂娉曞叾瀹炲氨鏄畝鍗曠殑绾跨▼姹犮備綘鍐欎竴涓嚎绋嬬鐞嗙被锛屾彁渚涜繖鏍峰嚑涓柟娉曪紝浜х敓涓涓柊绾跨▼锛屽悓鏃惰繑鍥炶繖涓嚎绋嬬殑鍞竴鏍囪瘑锛堝叾瀹炲氨鏄痶hread鐨勫彞鏌勶紝鍒涘缓thread杩樻槸瑕佺敤鍒癕FC鐨勪骇鐢熺嚎绋嬪嚱鏁帮級銆傝鏌愪釜绾跨▼璺戯紙濡傛灉绾跨▼涓嶆槸鑷惎鍔級銆傚叧闂煇涓嚎绋嬨傚ぇ姒傛濊矾鏄...
  • #璇锋暀涓 mfc涓啓澶氱嚎绋,搴旇鍐欏湪鍝釜绫讳腑,鍚屾椂mfc鐨勪富绾跨▼鍦ㄥ摢閲,灏忓紵...
    绛旓細MFC閲孉fxBeginThread()鍙互鍒涘缓绾跨▼锛寁c閲屼笉绠℃槸涓嶆槸MFC锛宮ain(鍦╳in32涓嬫槸WinMain)鍑芥暟浠g爜灏辨槸涓荤嚎绋嬶紝涓荤嚎绋嬮鍑烘暣涓繘绋嬮鍑猴紝涔熷彲浠ヨ皟鐢╓INDOWS API CreateThread銆
  • VC/MFC 鍔ㄦ佸垱寤澶氱嚎绋
    绛旓細1. 鍥犱负浣犳槸MFC绋嬪簭锛屽缓璁娇鐢ˋfxBeginThread()鏉ュ垱寤烘柊绾跨▼銆侫fxBeginThread()鐨勫唴閮ㄤ細鍋氫竴浜涚浉搴旂殑鍒濆鍖栵紝鍐嶈皟鐢–reateThread锛堬級API銆 绾跨▼澶勭悊鍑芥暟涔熷氨鏄竴涓櫘閫氱殑鍑芥暟锛屼絾鏄叾澹版槑褰㈠紡鏈夎瀹氱殑锛屽涓嬶細DWORD WINAPI ThreadProc (LPVOID pParam)锛涚嚎绋嬪嚱鏁扮殑鍚嶅瓧鐢变綘鑷繁瀹氾紝浣嗘槸鏍煎紡蹇呴』鏄粈涔堣繖涓0...
  • MFC澶氱嚎绋鍐欐枃浠跺嚭鐜鏁版嵁娣蜂贡
    绛旓細鍙﹀澶氱嚎绋鎵ц椤哄簭纭疄涓嶆槸鍙娴嬬殑锛屽紑浜嗕竴鍫嗙嚎绋嬶紝涓嶈兘淇濊瘉鍏堝紑鐨勭嚎绋嬪氨涓瀹氭墽琛屽湪鏈鍓嶏紝鎵浠鏁版嵁鍐欏叆椤哄簭鏄敊鐨勶紝鍙互鐞嗚В 浣犲彲浠ユ妸瑕佸啓鐨勬枃鏈坊鍔犲埌绫讳技List<CString>涓紝寰鏈熬杩藉姞锛屽啀寮绾跨▼锛岀嚎绋嬪幓鐪婰ist<CString>涓湁鍑犱釜鍏冪礌锛屾病鏈夊氨缁撴潫绾跨▼锛屾湁灏变粠澶村厓绱犲紑濮嬪啓鍏ユ枃鏈枃浠讹紝鍐欏畬涓涓紝鍒犻櫎...
  • mfc鏁版嵁搴撶紪绋,鎬ラ棶!
    绛旓細浣犳妸缂栬緫妗嗘帶浠跺拰鏁版嵁搴鐨勫瓧绗﹀叧鑱 缁戝畾鍟 閭g紪杈戞璇ヤ簡 鏁版嵁搴撲篃鏀逛簡 杩欎釜鏄脊鍑轰竴涓獥鍙d慨鏀圭殑 void CODBCView::OnRecAdd(){ CCsoreDlg dlg;if (dlg.DoModal()==IDOK){m_pSet->AddNew();m_pSet->m_course = dlg.m_strCourseNO;m_pSet->m_studentno = dlg.m_strStudentNO;m...
  • mfc缂栫▼鏄粈涔堟剰鎬?
    绛旓細Microsoft Visual Studio锛岃繖鏄竴涓敮鎸 MFC 鐨勫己澶ч泦鎴愬紑鍙戠幆澧冦傚湪 Visual Studio 涓紝绋嬪簭鍛樺彲浠ュ垱寤轰竴涓 MFC 搴旂敤绋嬪簭椤圭洰锛岀劧鍚庡紑濮嬫瀯寤虹敤鎴风晫闈佹坊鍔犳帶浠跺拰瀹炵幇搴旂敤绋嬪簭閫昏緫銆傞殢鐫瀵 MFC 鐨勭啛鎮夌▼搴︽彁楂橈紝寮鍙戜汉鍛樺彲浠ュ紑濮嬪埄鐢ㄦ洿楂樼骇鐨 MFC 鍔熻兘锛屽澶氱嚎绋嬬紪绋銆鏁版嵁搴寮鍙戠瓑銆
  • mfc 鏁版嵁搴撶紪绋 (odbc)
    绛旓細//浠鏁版嵁搴涓垹闄よ褰.sql.Format("DELETE member_tab ""where member_id = %d",id);TRACE(sql);m_db.ExecuteSQL(sql);//浠庡垪琛ㄦ帶浠朵腑鍒犻櫎璇ヨ褰.m_listMember.DeleteItem(nItem);} CATCH(CDBException,ex){ AfxMessageBox (ex->m_strError);AfxMessageBox (ex->m_strStateNativeOrigin);} A...
  • 璋佽兘甯垜鍐欎釜MFC澶氱嚎绋瀹為檯渚嬪瓙 璋㈣阿浜
    绛旓細鍔犳寜閽 杩樺緱MFC,浠g爜涓嶅ソ 灞曠ず, 缁欎綘璇︾粏浠嬬粛,涓嬮潰鍥涚鏂规硶 鍦澶氱嚎绋涓敤,闈犱綘澶氱悽纾,鐏垫椿杩愮敤鐜板湪娴佽鐨勮繘绋嬬嚎绋嬪悓姝ヤ簰鏂ョ殑鎺у埗鏈哄埗,鍏跺疄鏄敱鏈鍘熷鏈鍩烘湰鐨4绉嶆柟娉曞疄鐜扮殑銆傜敱杩4绉嶆柟娉曠粍鍚堜紭鍖栧氨鏈変簡.Net鍜孞ava涓嬬伒娲诲鍙樼殑,缂栫▼绠渚跨殑绾跨▼杩涚▼鎺у埗鎵嬫銆 杩4绉嶆柟娉曞叿浣撳畾涔夊涓 鍦ㄣ婃搷浣滅郴缁熸暀绋嬨婭SBN 7-...
  • mfc 澶氱嚎绋闂
    绛旓細鍦╳indows涓嬪仛鏈嶅姟鍣ㄦ渶濂界殑鏂规鏄疘OCP锛圛/O Complete port锛夛紝涓枃鍚岻/O瀹屾垚绔彛 鎬ц兘寰堜笉閿欍傛秹鍙妛indows楂樼骇缂栫▼锛岄毦瀛︽寚鏁版瘮杈冮珮 浣犵殑鐨勬劅瑙夊緢涓嶉敊锛岃繖涓柟妗堜笉鍙锛1.浼氭氮璐瑰ぇ閲廋PU鏃堕棿銆備竴鍙拌绠楁満CPU涓暟鏈夐檺锛屽鏋滀綘鐨勮绠楁満鍙湁2涓狢PU锛屽嵈寮浜200绾跨▼銆傝繖涓椂鍊欏湪鍚屼竴鏃堕棿锛屾渶澶氭湁2涓嚎绋嬪湪...
  • 扩展阅读:程序员自学从哪个入门 ... plc编程口诀 ... 程序员自学免费课程 ... ug编程视频全套自学 ... 自学plc编程先学什么 ... 编程入门先学什么 ... 电脑初级入门课程自学 ... c十十编程下载 ... 电脑初学入门视频教程 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网