_beginthreadex 線程 函數 解決假死

.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)
{
*psort = (A*)pSrt;
//內容
//(這時類內的成員函數、成員變量,前面都要加上 psort  ->  ,函數裏的所有for(int j.....)循環內,都加上
// if ( j != 0 && ( j % 15 == 0 )) //15可變
// {
// WaitForSingleObject( psort->Exit_CS, 1 );//1可變
// }
//)
flagSort = 0;
return 0;
}

最後,學的不精,歡迎高手指教


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章