第一次写多线程的程序,运行时异常,前辈们进来看看
第一次写多线程的程序,运行时错误,前辈们进来看看
原来有个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及后面的代码
原来有个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及后面的代码