本帖最后由 pasuka 于 2016-8-27 19:10 编辑 大头鼹鼠 发表于 2016-8-26 12:47 当然学过计算机啦! |
这论坛估计没有专门学计算机的。 |
fcode 发表于 2016-8-26 11:15 按照你的提示 在周振红的书《Intel Visual Fortran 应用程序开发》书里找到了解决办法,果然一点也不卡了 谢谢 |
fcode 发表于 2016-8-26 11:15 好的 我下来看看,谢谢 |
pasuka 发表于 2016-8-26 11:06 写的很明白 谢谢 多学习 你们都是学计算机的吗? |
楼主可以看看周振红的书《Intel Visual Fortran 应用程序开发》,上面有专门的多线程的章节。 (虽然我很不喜欢这本书) 你可能会用到一个叫 CreateThread 的函数。 OpenMP 是另外的概念。早在它出现之前,多线程就已经大面积应用了。 |
大头鼹鼠 发表于 2016-8-26 10:38 lz没有搞明白进程process和线程thread的区别,GUI需要的是两个人在同一个食堂分两桌吃饭,而OMP是两个人在同一个食堂凑一桌吃饭 传送门: 线程和进程的区别是什么? - 进程 - 知乎 http://www.zhihu.com/question/25532384 进程与线程的一个简单解释 - 阮一峰的网络日志 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html |
楚香饭 发表于 2016-8-24 15:29 [Fortran] 纯文本查看 复制代码 PROGRAM PROGRESS ! USE WINTERACTER USE RESID use One_D_Argumnet IMPLICIT NONE ! Number of iterations parameter TYPE(WIN_MESSAGE) :: MESSAGE INTEGER ::ITER1,ITER2,ITER3,CALCU_1D,CALCU_2D,CALCU CHARACTER(LEN=2) :: CRESULT LOGIcal :: QUIT=.FALSE.,login=.false. INTEGER ::ITYPE CALL WInitialise() !主程序窗口 CALL WindowOpen(FLAGS =1+2+4+8,MENUID=IDM_MENU1,DIALOGID=IDD_DIALOG1,TITLE="HELLOThe Laser Heating Calculation System V1.0.0") CALL IGrSelect(DrawField,IDF_PICTURE2) CALL WDialogColour(IDF_LASER_POW,RGB_RED) !**************************************************** 100 DO WHILE(.NOT.QUIT) CALL calc_itme !加载计算序列号 CASE (PushButton) SELECT CASE (MESSAGE%VALUE1) CASE (IDRUN) IF (ISTATE==2) THEN CALL WMessageBox(OKONLY,InformationIcon,CommonOK,'Wrong','CAUTION') QUIT = .FALSE. ELSE IF(ISTATE==1) THEN !$OMP WORKSHAR Call calc_itme_modify !这部分是程序的求解部分,我加了 !$OMP WORKSHAR 和 !$OMP end WORKSHAR !这个语句对是在第二个线程运行吗? 因为有矩阵的运算所以是用的这个语句对 CALL get_property CALL slov_pro QUIT = .FALSE. !$OMP end WORKSHAR END IF CASE (IDCANCEL) QUIT = .TRUE. END SELECT END SELECT END DO CALL WindowClose() STOP END PROGRAM PROGRESS 加了这个线程后 好像并没与什么改善,是不是我的循环量太大呀,5万多个循环的(20,20)二维数据的AX=B线性方程的求解 |
好的 谢谢了 看来要学习一下GUI的资料了 谢谢提示 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-5-16 11:20