描述:在一个模态窗口中有两个BUTTON(B1与B2)和一个EDITBOX
      StarServer()中有两个线程,都是死循环,无出口
期望:通过点击B1调用StarServer函数,启动服务
      点击B2停止服务,服务期间输出信息到EDITBOX
我的问题:
1、我在B1 的CLICK事件中调用StarServer()后,程序呈死机状,无输出信息
2、B2的CLICK事件不会写,如何终止在运行的线程?
3、启动服务后,即使关闭模态窗口,服务仍运行,如何实现?服务的启动与终止是否得在用上投递消息?StarServer()
{
HANDLE thread[2];
DWORD threadsid,threadrid;
thread[0]=CreateThread(NULL,0,th1,NULL,0,&threadrid);
if(thread[0]==NULL)
{
    outputInfo("启动th1线程失败!");
return;
}
    thread[1]=CreateThread(NULL,0,th2,NULL,0,&threadsid);
if(thread[1]==NULL)
{
    outputInfo("启动th2线程失败!");
    return;
}
WaitForMultipleObjects(2,thread,FALSE,INFINITE);CloseHandle(thread[0]);
CloseHandle(thread[1])
}

解决方案 »

  1.   

    关于线程使用可以看我的blog上的一片文章WaitForMultipleObjects是个堵塞函数,你的线程函数是死循环,又用了INFINITE参数,所以会被堵塞到这个StartServer函数中,消息循环被堵塞,自然象死机一样
      

  2.   

    楼上的兄弟,你的blog,你也没说呀,
    我的问题,你能指点一二吗?
      

  3.   

    你的startsever是一个死循环来得,要等到两个线程返回才返回阿,当然是死机一样了。
      

  4.   

    startserver中去掉
    WaitForMultipleObjects(2,thread,FALSE,INFINITE);CloseHandle(thread[0]);
    CloseHandle(thread[1])
    在thread中加入
    WaitForSingleObjects()
    {
    return 
    }
    然后button2发送线程中wait的事件。
      

  5.   

    HANDLE g_thread[2];
    BOOL g_bStop = TRUE;
    StarServer()
    {
    g_bStop = FASLE;
    DWORD threadsid,threadrid;
    g_thread[0]=CreateThread(NULL,0,th1,NULL,0,&threadrid);
    if(g_thread[0]==NULL)
    {
        outputInfo("启动th1线程失败!");
    return;
    }
        g_thread[1]=CreateThread(NULL,0,th2,NULL,0,&threadsid);
    if(g_thread[1]==NULL)
    {
        outputInfo("启动th2线程失败!");
        return;
    }
    }StopServer()
    {
    g_bStop = TRUE;
    WaitForMultipleObjects(2,g_thread,FALSE,INFINITE);CloseHandle(g_thread[0]);
    CloseHandle(g_thread[1])g_thread[0] = g_thread[1] = NULL;}
      

  6.   

    njg_jh(糨糊) :
    按你的方法,出如下错误:
    arpTest.exe 中的 0x7c22e26c (mfc71d.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突 。
      

  7.   

    线程创建之后,当从StarServer()退出时,产生错误