读书人

多线程基础,该如何处理

发布时间: 2012-11-06 14:07:00 作者: rapoo

多线程基础
#include "windows.h"
#include <iostream>
#include <process.h>
using namespace std;

class ExampleTask
{
public:
friend void taskmain(LPVOID param);
void StartTask();
};

void taskmain(LPVOID param)
{
cout<<2<<endl;
//ExampleTask *pTaskMain = (ExampleTask*)param;
cout<<3<<endl;
}

void ExampleTask::StartTask()
{
cout<<1<<endl;
_beginthread(taskmain,0,this);
}

int main(int argc,char *argv[])
{
ExampleTask realTimeTask;
realTimeTask.StartTask();
return 0;
}

为什么在调试的过程中 就不会输出2 , 而在运行的时候,就会出现2(为什么3不会出现),然后把
void taskmain(LPVOID param)这个函数中的第2个句子(也就是cout<<"1"和cput<<"3"之间那个句子,运行就不会出现2,这是为什么,例子来自win32多线程,表示看不懂。。

[解决办法]

C/C++ code
//ExampleTask *pTaskMain = (ExampleTask*)param;
[解决办法]
线程还没跑完,程序就退出了
_beginthread之后WaitForSingleObject一下就好了
[解决办法]
探讨

WaitForSingleObject函数参数handle是指线程么 还是什么 对应上面例子的哪一个

[解决办法]
程序里面有2个线程,main()函数所在的是主线程,由启动代码创建,然后在主线程中又创建了一个新线程.此后由于2个线程交替运行,进度不一,有可能主线程先运行完毕,即退出main(),返回到启动代码,进而结束整个进程.
在main()的末尾加上system("pause"),即要防止主线程先于新线程退出,或者在main()创建新线程的代码之后任意位置加入等待代码都可以.

读书人网 >C++

热点推荐