iCAx开思工具箱

标题: 加锁解锁是怎么一回事? [打印本页]

作者: boliang99    时间: 2005-9-24 16:04
标题: 加锁解锁是怎么一回事?
一直不明白加锁解锁的意义,为什么ug就对话框就还能用模态非模态来定义?我下面的问题可能与加锁解锁有关,但我一直不知道如何解决,诚望各位不吝指教,谢谢!

我用一个MFC非模态对话框调用几个带UG入口函数的动态库,得到几个二级对话框,如果用完一个对话框,关掉,起动另一个,没问题。可是当我用了一个对话框,忘记关掉就另起动了一个对话框,没关掉的对话框就被隐藏起来(应该没关掉)后面的对话框就不能正常运行了,为什么呢?我用的部分代码如下:
1。这是二级对话框的动态库入口函数(这是其一,其它类似)://#ifdef DISPLAY_FROM_USER_EXIT
extern void ufusr (char *param, int *retcode, int rlen)
{
    int  response   = 0;
    int  error_code = 0;

//   if ( ( UF_initialize() ) != 0 ) //一级对话框已初始化
   //        return;
        UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);//加锁
    if ( ( error_code = UF_STYLER_create_dialog ( "h.dlg",
           CHANGE_cbs,      /* Callbacks from dialog */
           CHANGE_CB_COUNT, /* number of callbacks*/
           NULL,        /* This is your client data */
           &response ) ) != 0 )
    {
          char fail_message[133];

          /* Get the user function fail message based on the fail code.*/
          UF_get_fail_message(error_code, fail_message);
          UF_UI_set_status (fail_message);
          printf ( "%s\n", fail_message );
    }

UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);//解锁
//   UF_terminate();                             
    return;
}

2。这是一级对话框调用代码:
    char file_name[]= "../h_.dll" ;   
     FreeLibrary(hpart);
   HINSTANCE hpart=NULL;
    typedef void (WINAPI * LIBDLL)();
   hpart = :oadLibrary (file_name);
   LIBDLL lpproc;
lpproc = (LIBDLL)GetProcAddress (hpart,"ufusr");
if(lpproc!=(LIBDLL)NULL)
{
(*lpproc)();
}}
作者: 深夜摔键盘    时间: 2005-9-24 18:49
按照UG的文档里的说法,加锁机制主要是在XWINDOWS窗口调用UG对话框时使用的。MFC窗口需不需要加锁,这个没有任何的说明。

我记得以前测试过使用MFC对话框引出一个UG点构造器,如果不加锁,就出不来。后来也没怎么再试。如果二次开发天天都是和这些界面上的琐事打交道,感觉太浪费生命了。就一直都使用UISTYLER了。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3