我写的程序如下:
______________________________________________________
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc( LPVOID lpParameter )
{
char c = (int)lpParameter;
for( int i = 0; i < 100; i++ )
{
cout << c;
cout.flush();
}
return 1;
}int main()
{
HANDLE hThread1;
HANDLE hThread2; hThread1 = CreateThread( NULL, 0, Fun1Proc, (LPVOID)'a', 0, NULL );
hThread2 = CreateThread( NULL, 0, Fun1Proc, (LPVOID)'b', 0, NULL ); WaitForSingleObject( hThread1, INFINITE );
CloseHandle( hThread1 );
WaitForSingleObject( hThread2, INFINITE );
CloseHandle( hThread2 ); return 0;
}
_______________________________________________________________________________________
本来期望的效果是两个线程一个输出a,一个输出b,但现在的情况是输出一部分,就提示如下:
"0x00404446"引用的"0x00000000"内存,该内存不能为"read"这个提示出现的时间是不确定的,有时候只输出几个字符就出现了,有时候输出很多才出现。而且会出现到了后半段只输出a或b的情况。
______________________________________________________
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc( LPVOID lpParameter )
{
char c = (int)lpParameter;
for( int i = 0; i < 100; i++ )
{
cout << c;
cout.flush();
}
return 1;
}int main()
{
HANDLE hThread1;
HANDLE hThread2; hThread1 = CreateThread( NULL, 0, Fun1Proc, (LPVOID)'a', 0, NULL );
hThread2 = CreateThread( NULL, 0, Fun1Proc, (LPVOID)'b', 0, NULL ); WaitForSingleObject( hThread1, INFINITE );
CloseHandle( hThread1 );
WaitForSingleObject( hThread2, INFINITE );
CloseHandle( hThread2 ); return 0;
}
_______________________________________________________________________________________
本来期望的效果是两个线程一个输出a,一个输出b,但现在的情况是输出一部分,就提示如下:
"0x00404446"引用的"0x00000000"内存,该内存不能为"read"这个提示出现的时间是不确定的,有时候只输出几个字符就出现了,有时候输出很多才出现。而且会出现到了后半段只输出a或b的情况。
解决方案 »
- typedef LRESULT (CALLBACK * WNDPROC) (HWND,UINT,WPARAM,LPARAM)如何理解?
- ADO模型中的域对象是什么意思?
- 如何在CView的一个对话框成员里响应工具栏按钮事件?
- 文件数据读取后如何填加到列表
- 为什么我的程序在vc中 releas和debug都能运行,但是不能调试?
- 请教大侠,想要使用vector 容器在vc中怎样使用?只包含#include <vector> 成吗?
- 不知道怎么开线程,线程里怎么处理数据,请给写几句看看
- 向 CEdit 发消息,::SendMessage(m_ctlEdit.m_hWnd,EN_CHANGE,0,0) 为何OnChangeEdit()响应不到?
- socket 编程,内网连接不上的问题
- 串口问题,请各位进来指点指点!!急急急。。。。。。。。。
- VC++编写Windows服务管理器
- CInternetSession下载文本文件问题
2005是有lock的。
cout.flush();
不安全!
即使线程已经结束了,线程的HANDLE没有关闭,那线程的内核对象就依旧有效,只是状态为运行完了。知道CloseHandle的调用,该线程的内核对象才会被销毁。TO: 楼主
我在VC6.0下测试了楼主的程序,好像没有错误,能够正常运行。楼主请确认一下你的环境,或者你的Source是否原封未动的贴出来了。
就没错了。