能力值:
( LV8,RANK:130 )
2 楼
正常
vs2005
能力值:
(RANK:1010 )
3 楼
你的代码只能实现让ChildFun线程sleep.
但并不能让主线程等待.
改成这样就可以了(伪码,需要添加相应的参数)
main()
{
.....
ResetEvent ( hEvent ) ;
CreateThread ( .... ) ;
WaitForSingleObject ( hEvent, .... ) ;
......
return 0 ;
}
DWORD WINAPI ChildFun ( ....)
{
Sleep ( 5 * 1000 ) ;
SetEvent ( hEvent ) ;
return 0 ;
}
能力值:
( LV12,RANK:980 )
4 楼
最初由 北极星2003 发布 你的代码只能实现让ChildFun线程sleep. 但并不能让主线程等待. 改成这样就可以了(伪码,需要添加相应的参数) ........
这样不行啊!我的目的是由主线程通知子线程开始运行,然后子线程完成任务后再通知主线程结束。
能力值:
( LV8,RANK:130 )
5 楼
创建的时候先挂起他就可以了... HANDLE hThread = CreateThread(NULL, 0, ChildFunc, NULL, CREATE_SUSPENDED, &uId);
....
//当要开始的时候
ResumeThread(hThread);
能力值:
( LV10,RANK:170 )
6 楼
问题已经解决了,结论如下:
在子线程中,你是用cout <<"子线程开始工作...... \n";
进行输出的,只要改成:
cout<<"子线程开始工作..."<<endl; 或
printf("子线程开始工作...!\n");
都可以正常工作。
什么原因我也不知道,突然间问题就没了
能力值:
( LV12,RANK:980 )
7 楼
最初由 thinkSJ 发布 问题已经解决了,结论如下: 在子线程中,你是用cout <<"子线程开始工作...... \n"; 进行输出的,只要改成: cout<<"子线程开始工作..."<<endl; 或 printf("子线程开始工作...!\n"); ........
确实是这样!感谢了。但又发现一个问题,就是在VC++60中调试时,程序运行后提示“所有工作已完成”,接着控制台提示“Press any key to continue”,按任意键后控制台退出,说明运行正常。如果直接双击运行程序则提示“子线程开始工作。。。。”5秒后自动退出,主线程的“所有工作已完成”显示不出来。这又是什么原因呢?
能力值:
( LV12,RANK:210 )
8 楼
C++的库有单线程库和多线程库之分的,不知楼主的情况是否和这有关
能力值:
( LV12,RANK:980 )
9 楼
我已经注意到这个问题的,在编译前设置成多线程DLL。
能力值:
( LV12,RANK:210 )
10 楼
猜想VS6.0的库是有Bug的
以前我就碰到过VS6.0的库有内存泄漏的问题
能力值:
( LV10,RANK:170 )
11 楼
所有的控制台程序都有这个问题据我所知的解决方法是
如果是C语言,在最后加上一个getchr()即可,
如果是C++则加上cin>> 变量名
能力值:
(RANK:1010 )
12 楼
最初由 csjwaman 发布 确实是这样!感谢了。但又发现一个问题,就是在VC++60中调试时,程序运行后提示“所有工作已完成”,接着控制台提示“Press any key to continue”,按任意键后控制台退出,说明运行正常。如果直接双击运行程序则提示“子线程开始工作。。。。”5秒后自动退出,主线程的“所有工作已完成”显示不出来。这又是什么原因呢?
实际上已经显示了,只不过进程立即结束了,太快,看不清楚罢了
只需要在main 函数return 之前加入“cin >> a ;”
这样就可以见到效果
目的只是在进程结束之前暂停下
我曾经看到过一个暂停的函数,现在想不起来了
还是这个老土的办法
能力值:
( LV12,RANK:980 )
13 楼
谢谢各位指教!
能力值:
( LV12,RANK:370 )
14 楼
return前加个:
system("pause");
能力值:
(RANK:1010 )
15 楼
最初由 ikki 发布 return前加个: system("pause");
就是这个
能力值:
( LV12,RANK:980 )
16 楼
多谢各位了!