读书人

第一次写多线程的程序运行时异常前

发布时间: 2012-01-22 22:38:43 作者: rapoo

第一次写多线程的程序,运行时错误,前辈们进来看看
原来有个ADO访问数据库模块程序,我想用多线程测试一下看看该程序是否线程安全的,编译和连接没问题,但是运行时出错,说某指令引用的某块内存不能为 "written " 下面是代码:

CRITICAL_SECTION CriticalSection;

DWORD WINAPI mythread(void *p)
{
EnterCriticalSection(&CriticalSection);

int tvalue=0;

Initfunction();//初始化,读取服务器配置信息

MyConnectDB();//连接数据库

INFO1 tempArray1[MAX];

INFO2 tempArray2[MAX];

tvalue=Getinfor1( "TTT ",0,tempArray1);

tvalue=Getinfor2( "YYY ",0,tempArray2);

LeaveCriticalSection(&CriticalSection);

return 0;
}


int main()
{

HANDLE handle[2];

DWORD dw[2];


InitializeCriticalSection(&CriticalSection);//初始化临界区

handle[0]=CreateThread(NULL,0,mythread,NULL,0,&dw[0]);

handle[1]=CreateThread(NULL,0,mythread,NULL,0,&dw[1]);

CloseHandle(handle[0]);

CloseHandle(handle[1]);

DeleteCriticalSection(&CriticalSection);

return 0;

}
设置断点看了一下,好象到Initfunction();这里就出错了,
会是什么问题呢,小弟刚接触多线程,请多多指教

[解决办法]
看看Initfuncton()里的哪一句话错了不就知道了吗?
[解决办法]
设断点,单步调试下,看看到底是运行到哪一句出现了问题
[解决办法]
呵呵,你为什么不在debug模式下调试一下呢
你的ReadConfigInfo()中有那么多m_XXXXXX,这些变量你都保证在线程中有访问的权限吗?
或许你访问的仅仅是一些空的对象呢.
还有:MyConnectDB()是怎么写的呢?
[解决办法]
main函数直接就退出了,criticalSection也释放了。
你应该等两个线程退出再执行释放criticalSection及后面的代码

读书人网 >VC/MFC

热点推荐