你应该建立两个进程, 这样才可以观察, 还有你的 haha 是在 main 函数里面, 只执行一次, 不会输出多次, qiubai, 在进程中, 但是 if (a>0) 也就是执行一次之后这个进程虽然没有关闭但是, 已经不可能进入输出的程序了.
#include <windows.h>#include <stdio.h>
DWORD WINAPI myfun1(LPVOID lpParameter)
DWORD WINAPI myfun2(LPVOID lpParameter)
static HANDLE hmutex, hmutex2
int main()
{
HANDLE h1
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL)
HANDLE h2
h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL)
printf("Start:\n")
Sleep(5000)
::CloseHandle(h1)
::CloseHandle(h2)
return 0
}
DWORD WINAPI myfun1(LPVOID lpParameter)
{
int a = 0
while (1)
{
::WaitForSingleObject(hmutex,INFINITE)
a++
printf("qiubai\n")
::ReleaseMutex(hmutex)
Sleep(200)
if(a >15)
break
}
return 0
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
int b = 0
while (1)
{
::WaitForSingleObject(hmutex2,INFINITE)
b++
printf("haha\n")
::ReleaseMutex(hmutex2)
Sleep(300)
if(b >10)
break
}
return 0
}
你的“ IDC_LIST1m_.AddString("111")//这行也要实现”的变量有问题,我就把它当做m_LIST1来处理了。已编译通过。
UINT abc(LPVOID pParam)
{
CCsDlg *pDlg
pDlg =(CCsDlg *)pParam
pDlg->m_LIST1.AddString("111")
return 0
}
void CCsDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CWinThread *MainStartThread
LPVOID lmainparam
lmainparam = (LPVOID)this
MainStartThread=::AfxBeginThread((AFX_THREADPROC)abc, (LPVOID)lmainparam, THREAD_PRIORITY_NORMAL,0,0,NULL)
if (MainStartThread == NULL)
{
return
}
return
}
调用线程时,向LPARAM参数传递一个将其声明为友元的类A的对象的指针。
在函数内部,用强制转换获取这个对象的指针,然后就可以访问此对象的函数或者数据成员了,形式代码如下
A * pObjectOfA = (A *) lParam // 强制转换,获取A类对象指针pObjectOfA->MemberMethod( ) // 调用A类对象的成员函数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)