c++多线程printf重复输出 运行多次,必须是多次,haha会多次输出,qiubai只输出一次,win7,vc6.0

c++多线程printf重复输出 运行多次,必须是多次,haha会多次输出,qiubai只输出一次,win7,vc6.0,第1张

你应该建立两个进程, 这样才可以观察, 还有你的 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类对象的成员函数   


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12053943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存