利用全局变量进行线程间通信是不是有危险?为什么?我现在想在线程间传递字符串,该怎样做?希望可以给个例子,谢谢大家

解决方案 »

  1.   

    用 全 局 变 量 可 以 , 但 要 加 同 期 保 护 , 比 如 Mutex之 类 。
      

  2.   

    这么说吧,
    现在是前台是一个GUI窗口,有个edit控件,怎样才可以让后台的另一个线程来改变edit控件的内容?
    我也知道很多方法可以用,但谁可以说的清楚一些?
      

  3.   

    后台线程直接修改界面线程中的可视元素是非常危险的,好的做法是发送一个消息给主线程,由主线程更新这个Edit的值。
      

  4.   

    启动线程是,把edit控件的指针传给线程如:
       CEdit * pEdit;
    ...
    AfxBeginThread ( WorkThread, pEdit );
    ....
    线程函数中
    CEdit* pEdit = ( CEdit )pVoid;
    ...
       pEdit ->SetWindowText ( "Context you need" );...
      

  5.   

    to AaronLiu(放不稳的鸡蛋) :
    "邮件槽,内存共享,系统原子,剪贴板"好像是进程间的通讯方式吧???
      

  6.   

    同意 oldworm(oldworm) 前台是GUI时,最好的做法是通过消息通迅而不是直接操纵前台,这样也可以不考虑同步保护的问题了。具体做法是后台先获得前台的名柄hWnd,需要向前台CEdit发送字符串时,PostMessage(hWnd,0x7777,0,(long)sz)。参数sz是由系统全局堆分配得到的内存,存放你要传的字符串。
    前台CEdit捕获0x7777消息,取出sz改变CEdit。
      

  7.   

    线程间传递字符串?用 WM_SETTEXT
      

  8.   

    老兄,你很牛啊。才学了三天就开始搞线程了。
    不过你这个问题好想用不到线程通信啊。
    方法1:
    在BeginThread函数里面把CWnd* 用LPVOID参数传递到线程里面。
    方法2:
    用AfxGetMainWnd()方法得到当前主窗口指针。取得窗体指针之后:
    用SetDlgItemText就可以搞定了。