dll编程方面很少涉足,只做过简单的就是将某些功能放到dll的一个导出函数中。
目前想做个接口,举个例子:
我想让某个dll(我自己写)从串口不断的取数,解包,然后通知装载它的进程进行处理。
问题是:
如果保持这个dll不停的从串口取数,是不是写个无限循环,在这个无限循环中读串口?
当进程退出时,dll如何知道并从无限循环中跳出?请问我的方法对不对,还有什么其它的方法,请列举一二,谢谢!问题可能比较初级,因为我现在还在入门。

解决方案 »

  1.   

    让DLL线程在每次循环之前去判断主线程中的一个标记即可,主线程在退出前设置标记位,然后等待DLL线程的退出信号,DLL线程在下次循环开始的时候判断主线程的标记,并在退出前向主线程发信号,注意,主线程的等待要有超时,否则比较危险。
    DLL:
       ThreadProc()
      {
          CreateEvent("exit event");      while(pHost->m_bContinue)
          {
               Do();
          }
          SetEvent("exit event");
       }Main:
        OnExit()
        {
           m_bContinue = FALSE;
           if(WaitForSingleObject("exit event",m_nWaitExitDur) == object_0)
           {
               //正常退出
            }
            else
            {
              //强行结束DLL线程,非正常退出
             }       
         }其中使用的具体函数名字和参数什么的记不清了,结构应该没有什么问题吧,你可以尝试一下
      

  2.   

    可以在dll写一个退出函数,主线程要dll退出时调用一下它就行了.
      

  3.   

    我觉得直接把DLL插到一个系统进程或写个服务来装载DLL要“正宗”些,当然要在win2k以上.