1.进程A创建了线程B,需要在线程B中修改进程A的全局变g_num为10,请写出代码2.某公司需要开发一个客户端绘图软件,以实现画线、画圆、画多边形等功能,并把图形发送到连接在远程服务器端的绘图仪上打印。绘图仪公司提供了用来控制绘图仪的动态链接库(安装在服务器端),动态链接库中包含如下一些API:
Init()  //初始化绘图仪
draw(RGB(),x ,y)  //绘图
等等
1)请画出程序的主要数据流程图和用例图
2)为了使客户端使用更加灵活,考虑使用COM技术实现对远程绘图仪的控制,请使用IDL语言编写一个COM IDispatch接口
3)请画出程序调用2)中COM接口的数据流程图
4)使用多线程技术实现客户端绘图软件绘图和打印的同步进行,请用VC++编写客户端与服务器的通讯线程

解决方案 »

  1.   

    CRITICAL_SECTION g_cs;
    InitializeCriticalSection(&g_cs);
    EnterCriticalSection(&g_cs);
    g_num=10;
    LeaveCriticalSection(&g_cs);or
    如果g_num 是整形
    InterlockedExchange(&g_num, 10);
      

  2.   

    昏 针对第一个问题楼上的几位好象把简单的文件说复杂了 想两个线层之间给同一变量赋值有必要用临界区吗 有必要先锁定吗??
    第一题 其实只要g_num=10;就行
      

  3.   

    补充一下,跨线程使用的变量一定要加上volatile关键字。
      

  4.   

    1.楼主明显说的是进程创建的是线程,所以问题就很简单了  extern g_num;
      WINAPI void MyThread(LPVOID pPara){g_num = 10;}
      而且题目有点迷或,全局变量怎么能规进程所有呢? 进程A使用互斥体或临界区了? ...2.IDL??? 不懂 ,如果用ATX写个组件还勉强能应付,哈哈
      

  5.   

    第二题???我只会用ATL做组件,嘿嘿
      

  6.   

    楼上想的太简单了吧,线程安全是多线程的首要问题,不需要特别指出。这道题不是考这个,难道是看你会不会赋值?其实用InterlockedExchange(&g_num, 10);同样是线程安全而且效率高。