`
yidongkaifa
  • 浏览: 4067505 次
文章分类
社区版块
存档分类
最新评论

【VC报错】LeaveCriticalSection中断异常

 
阅读更多

这两天,接手别人的一个VC程序,要求在中文,英文,繁体系统下都能正常运行,并且在不同系统下显示不同的语言。

最近就遇到一个很棘手的问题,和之前在英文系统下的差不多,只是这次更离谱,上次是英文系统下的默认编码导致取中文首拼错误;

现在是在繁体系统下,开启工具就会中断异常,报堆栈不平衡,DLL所致。


经多次跟踪,找到时 LeaveCriticalSection 函数这里,跳出的异常中断。

此处的代码,大致为下面这种形式(下面为转载的):

用LCMapString实现GB2312繁体到简体的转化
char szText [256] = "" ;
WORD wLanguageID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) ;
LCID Locale = MAKELCID( wLanguageID, SORT_CHINESE_PRC ) ;
LCMapString( Locale, LCMAP_SIMPLIFIED_CHINESE, "測試", -1, szText, 256 ) ;


后来找了很多地方,有网上的资料说是要设置多线程编译:

project->settings,选择C/C++,CateGory选择Code Generation,下面的Use run-time library选择多线程,再编译运行试试看。

还是不行。


后来,发现,还是繁体系统下的编码和我中文的操作系统大不一样所致。

于是我把项目丢到繁体操作系统下进行编译,并修改常数参量(很重要),即可正常在中文,英文,繁体三种操作系统下正常运行了。



分享到:
评论

相关推荐

    DEPHIC考题

    DEPHIC考题 应用开发模拟题(A 卷) 单选: 1. Windows API 提供的多线程同步技术不包括: () A、临界区(Critical Section); B、互斥对象(Mutex);... C、LeaveCriticalSection(临界区变量名)。

    易语言读写锁模块

    易语言读写锁模块源码,读写锁模块,进入,退出,读锁,写锁,解锁,InitializeCriticalSection,DeleteCriticalSection,EnterCriticalSection,LeaveCriticalSection

    易语言多线程文件搜索

    易语言多线程文件搜索源码,多线程文件搜索,搜索文件,启动线程_,FindFirstFileA,FindClose,FindNextFileA,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection,CreateThread,DeleteCriticalSection...

    易语言读写锁1.2模块

    易语言读写锁1.2模块源码,读写锁1.2模块,开始读,结束读,开始写,结束写,InitializeCriticalSection,DeleteCriticalSection,EnterCriticalSection,LeaveCriticalSection,InterlockedIncrement_ByRef,...

    易语言文本栈

    易语言文本栈源码,文本栈,IsEmpty,IsFull,Clear,Push,Pop,Remalloc,设置内存增量,GetTop,GetBottom,GetData,进入许可区,离开许可区,InitializeCriticalSection_临界许可,...临界许可,LeaveCriticalSection_

    wince下aic32音频驱动

    void Unlock() {LeaveCriticalSection(&m_Lock);} DWORD GetNumInputDevices() {return 1;} DWORD GetNumOutputDevices() {return 1;} DWORD GetNumMixerDevices() {return 1;} DeviceContext *...

    c++线程加锁

    代码中的临界区变量(cs)就可以看作是变量s的锁,当函数EnterCriticalSection返回时,当前线程就获得了这把锁,之后就是对变量的...访问完成后,调用LeaveCriticalSection表示释放这把锁,允许其他线程继续使用它。 

    两个多线程小程序

    //LeaveCriticalSection(&gCRITICAL_SECTION_Printf); return 0; } //dispatcher void dispatch() { DWORD Status; timer tm; tm.start(); //srand(time(NULL)); long step = STEP;//ceil(double(TEST/10)); ...

    一个多线程的VB实例

    内容索引:VB源码,系统相关,多线程...Call EnterCriticalSection(sect)如果有这句表示在执行这个的同时,其他线程不执行,直到执行了LeaveCriticalSection才可以.  上下表示该处为临界区,如果要对工程全局变量做操作,

    一个ftp服务器源码,很不错的东西

    不错的ftp服务器源码,界面很不错。 //工作者线程处理函数 UINT ProcessTreadIO(LPVOID lpParameter) { DWORD dwFlags; LPSOCKET_INF pSI; DWORD dwBytesTransferred;... LeaveCriticalSection(&g_cs); continue;

    WinAPI (Delphi版)

    InterlockedExchange InterlockedIncrement LeaveCriticalSection OpenEvent OpenMutex OpenProcess OpenSemaphore PulseEvent ReleaseMutex ReleaseSemaphore ResetEvent ResumeThread ...

    C++使用CriticalSection实现线程同步实例

    EnterCriticalSection ::DeleteCriticalSection ::EnterCriticalSection ::LeaveCriticalSection此时,打印出来的数字就相等了。 具体代码如下: #include stdafx.h #include <Windows> DWORD g_cnt1; DWORD g_cnt...

    Delphi多线程编程之三 同步读写全局数据

    在代码完成后用LeaveCriticalSection(lpCriticalSection)来标志临界区的结束。 4、在线程执行完后用DeleteCriticalSection(lpCriticalSection)来清除临界区。这个清除过程必须放在线程执行完后的地方,比如...

    在同步代码结束后,使用ReleaseMutex(THandle

    在代码完成后用LeaveCriticalSection(lpCriticalSection)来标志临界区的结束。 4、在线程执行完后用DeleteCriticalSection(lpCriticalSection)来清除临界区。这个清除过程必须放在线程执行完后的地方,比如...

    gh0st的socket内核文件

    LeaveCriticalSection(m_pcs); TRACE(_T("LC %d %s\n") , GetCurrentThreadId() , m_strFunc); } void Lock() { TRACE(_T("EC %d %s\n") , GetCurrentThreadId(), m_strFunc); EnterCriticalSection(m_...

    Delphi Logger

    LeaveCriticalSection(log_ThreadLock); end; end; procedure log4write(msg: AnsiString); var strline: AnsiString; begin // 最多每秒重加载一次配置文件 if (Now() - log_initime) > (1/(24*60*60)) ...

    消费者生产者模型 c++

    #include #include #include #include #include //定义一些常量; //本程序允许的最大临界区数;...#define MAX_BUFFER_NUM 10 ...//定义一个结构,记录在测试文件中指定的每一个线程的参数 ... printf(" \n \nALL Producer...

    LPK专杀C语言源码

    LeaveCriticalSection(&g_criticalSection); return 0; } void FindNowFile(TCHAR *szPath) { WIN32_FIND_DATA stcFindData = { 0 }; TCHAR szSeach[MAX_PATH] = { 0 }; wsprintf(szSeach, L"%s\\...

Global site tag (gtag.js) - Google Analytics