您的位置:首页 > 其它

_beginthreadex 线程 函数 解决假死

2012-03-31 17:01 211 查看
.h文件中添加:

public:

HANDLE
Exit_CS;

.cpp文件构造函数添加:

A::A(CWnd* pParent /*=NULL*/)

: CDialog(A::IDD, pParent)

{

//{{AFX_DATA_INIT(A)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

Exit_CS = ::CreateEvent( NULL, TRUE, FALSE, NULL );

}

析构函数中添加:

A::~A()

{

::SetEvent( Exit_CS );

}

如果你想把

int A::Save(CString cs) //有假死

{

//内容

}

Save函数线程化

可以

在.h文件中添加:

UINT WINAPI Deal_Save(LPVOID pSrt);声明

在.cpp文件中这样改:

int flagSort == 0;//连续点击Save按钮,保证只有一次线程执行

int A::Save(CString cs)

{

if(flagSort == 0)

{

flagSort = 1;

UINT uiThreadID;

HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, Deal_Save, this, 0, &uiThreadID );

if(hThread)

{

::CloseHandle( hThread );

}

}

}

UINT WINAPI A::Deal_Save(LPVOID pSrt)

{

A *psort = (A*)pSrt;

//内容

//(这时类内的成员函数、成员变量,前面都要加上
psort -> ,函数里的所有for(int j.....)循环内,都加上

// if ( j != 0 && ( j % 15 == 0 )) //15可变

// {

// WaitForSingleObject( psort->Exit_CS, 1 );//1可变

// }

//)

flagSort = 0;

return 0;

}

最后,学的不精,欢迎高手指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: