<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=40612&amp;view=findpost&amp;p=263704</guid>
        <pubDate>Mon, 15 Dec 2003 10:01:20 +0000</pubDate>
        <title>POSIX 2 WIN32 again....</title>
        <link>https://forum.sources.ru/index.php?showtopic=40612&amp;view=findpost&amp;p=263704</link>
        <description><![CDATA[Flex_Ferrum:  В POSIX&#39;е за это отвечает метод pthread_create. ]]></description>
        <author>Flex_Ferrum</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=40612&amp;view=findpost&amp;p=263701</guid>
        <pubDate>Mon, 15 Dec 2003 09:59:23 +0000</pubDate>
        <title>POSIX 2 WIN32 again....</title>
        <link>https://forum.sources.ru/index.php?showtopic=40612&amp;view=findpost&amp;p=263701</link>
        <description><![CDATA[TimPP:  <a href='http://openthreads.sourceforge.net/' target='_blank'>OpenThreads</a><br><br>Кросс-платформенная библиотека. Надеюсь поможет&#33; ]]></description>
        <author>TimPP</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=40612&amp;view=findpost&amp;p=263431</guid>
        <pubDate>Sun, 14 Dec 2003 18:19:09 +0000</pubDate>
        <title>POSIX 2 WIN32 again....</title>
        <link>https://forum.sources.ru/index.php?showtopic=40612&amp;view=findpost&amp;p=263431</link>
        <description><![CDATA[windsurfer:  Народ, я выдрал функцию, которая запускает окно, в котором должна выводиться векторная картинка... понятно, что без контекста трудно анализировать... но подскажите, как сделать так, чтобы эта функция запускалась отдельным потоком...желательно НЕ с помощью _beginthread %)<br><br>Маза такая, что гвхопенвиндов, или как ее там, запускается из фортрановского файла CALL GWXOPENWINDOW(параметры *икс....) / запускаться-запускается, а вот ничерта не рисует. Я накопал, что ее нужно запускать отдельным потоком... хелпните, чем можете...<br><br>очень важно то, что она должна запускаться в потоке, и также завершаться (в коде лежит _endthread, который требуется заменить на что-то типа TerminateThread)... иначе вешается основная программа<br><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1--><br>void //W32CALL <br>GWXWINOPEN&#40;int *xstart, int *ystart, int *xsize, int *ysize&#41;<br>{<br>    HWND winFocus, winFG, win;<br>//    HWND winF77;  <br>    RECT WinRect ,oldrect;<br>    POINT point;<br>    int  fontsize; <br>	//newcode<br>	wxstart  = *xstart;<br>    wystart  = *ystart;<br>    wxsize &nbsp; = *xsize;<br>    wysize &nbsp; = *ysize;<br>	//endofnewcode<br><br>//    int  lunit; <br><br>        printf&#40;&#34;&#092;nDIAGNOSTIC MESSAGE &#58; Entering display thread&#092;n&#34;&#41;;<br>    /*<br>   &nbsp; *  Make window large enough to hold a client area compensating for borders<br>   &nbsp; */<br>    WinRect.left &nbsp; = wxstart;<br>    WinRect.right  = wxstart + wxsize + 2*gwxXmatte;<br>    WinRect.top    = wystart;<br>    WinRect.bottom = wystart + wysize + 2*gwxYmatte + gwxYbar;<br><br>    /*<br>    printf&#40;&#34;&#092;nwxstart %d wystart %d &#092;n&#34;,wxstart,wystart&#41;;<br>    printf&#40;&#34;&#092;nwxsize  %d wysize  %d &#092;n&#34;,wxsize,wysize&#41;;<br><br>    printf&#40;&#34;&#092;nsetting rectangle left %d right %d &#092;n&#34;,WinRect.left,WinRect.right&#41;;<br>    printf&#40;&#34;&#092;nsetting rectangle top  %d bot &nbsp; %d &#092;n&#34;,WinRect.top,WinRect.bottom&#41;;<br>    */<br>    <br>    winFG    = GetForegroundWindow&#40;&#41;;<br>    winFocus = GetActiveWindow&#40;&#41;;<br>    GetWindowRect&#40;winFG, &amp;oldrect&#41;;<br>    /*<br>    printf&#40;&#34;Entry conditions&#58;&#092;n foreground %d/n orig focus %d&#092;n&#34;,winFG,winFocus&#41;;<br>    printf&#40;&#34;&#092;nold rectangle left %d right %d &#092;n&#34;,oldrect.left,oldrect.right&#41;;<br>    printf&#40;&#34;&#092;nold rectangle top  %d bot &nbsp; %d &#092;n&#34;,oldrect.top,oldrect.bottom&#41;;<br>    */<br><br>    /*    lunit = 5;<br>    winF77 = fgethwndqq&#40;&amp;lunit&#41;;<br>    printf&#40;&#34;&#092;nEntry conditions DVF window&#58; %d/n&#34;,winF77&#41;;<br>    */ <br><br>/* Must use WS_CLIPCHILDREN and WS_CLIPSIBLINGS styles. */<br><br>    gwxWin &nbsp; = CreateWindow&#40; gwxClass, gwxClass,<br>             &nbsp; WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,<br>             &nbsp; WinRect.left, WinRect.top,<br>             &nbsp; WinRect.right - WinRect.left, WinRect.bottom - WinRect.top,<br>             &nbsp; NULL, NULL, gwxInstance, NULL &#41;;<br><br>    if &#40;gwxWin == NULL&#41;  {<br>        fprintf&#40;stderr, &#34;Error&#58; NULL window handle.&#092;n&#34;&#41;;<br>        exit&#40;1&#41;;<br>    }<br><br>    ShowWindow&#40;gwxWin, SW_SHOWDEFAULT&#41;;<br>    UpdateWindow&#40;gwxWin&#41;;<br><br>    gwxHDC = GetDC&#40;gwxWin&#41;;<br>    if &#40;gwxHDC == NULL&#41; {<br>        fprintf&#40;stderr, &#34;Error&#58; NULL window DC.&#092;n&#34;&#41;;<br>        exit&#40;1&#41;;<br>    }<br><br>    /* Create compatible window bitmap */<br>    gwxmemHDC = CreateCompatibleDC&#40;gwxHDC&#41;;<br>    gwxBMAP &nbsp; = CreateCompatibleBitmap&#40;gwxHDC,xrootsize,yrootsize&#41;;<br>    SelectObject&#40;gwxmemHDC, gwxBMAP&#41;;<br><br>    SelectObject&#40;gwxmemHDC, GetStockObject&#40;ANSI_VAR_FONT&#41;&#41;;<br>    SetTextAlign&#40;gwxmemHDC, TA_LEFT | TA_BASELINE | TA_NOUPDATECP&#41;;<br>    SetBkMode&#40;gwxmemHDC, TRANSPARENT&#41;;<br>    <br>    gwxSize&#91;0&#93; = wxsize;<br>    gwxSize&#91;1&#93; = wysize;<br>    gwxSize&#91;2&#93; = wxstart + 2*gwxXmatte;<br>    gwxSize&#91;3&#93; = wystart + 2*gwxYmatte + gwxYbar;<br>    gwxSize&#91;4&#93; = 1;<br>    SetWindowPos&#40;gwxWin, HWND_TOP, gwxSize&#91;2&#93;, gwxSize&#91;3&#93;,<br>                         &nbsp; wxsize, wysize, SWP_NOMOVE|SWP_NOZORDER&#41;;<br><br>    /* SetWindowPos&#40;gwxWin, HWND_TOP, 0,0, 0,0, SWP_NOMOVE | SWP_NOSIZE &#41;; */<br>    SetForegroundWindow&#40;gwxWin&#41;; <br><br><br>    nRGBmap   &nbsp; = 0;<br>    penwidth    = 0;<br>    penpattern  = -1;<br>    ndash    = 0;<br>    fontsize = 1;<br><br>    gwxGC = gwxgc&#40;&amp;gwxWin, &amp;fontsize&#41;;<br>    SelectObject&#40;gwxmemHDC, gwxGC-&#62;pen&#41;;<br><br>    /* initially clear the background bitmap */<br>    SelectObject&#40;gwxmemHDC, gwxGC-&#62;bgbrush&#41;;<br>    PatBlt&#40;gwxmemHDC, 0, 0, xrootsize, yrootsize, PATCOPY&#41;;<br><br>    SelectObject&#40;gwxmemHDC, gwxGC-&#62;fgbrush&#41;;<br><br>    /* allocate black and white colors */<br>    /*r = 0;<br>      g = 0;<br>      b = 0;<br>      GWXALLOCRGBCOLOR&#40;&amp;r,&amp;g,&amp;b,&amp;ic&#41;;<br>      r = 0;<br>      g = 0;<br>      b = 0;<br>      GWXALLOCRGBCOLOR&#40;&amp;r,&amp;g,&amp;b,&amp;ic&#41;;<br>*/<br><br>    /*    printf&#40;&#34;entering message loop&#092;n&#092;n&#34;&#41;; */<br><br>    initthread = 1;<br><br>    /*    while &#40;GetMessage&#40;&amp;Message, NULL, 0, 0&#41;&#41; { */<br><br>    /* Custom message loop to check cursor window to do X-style focus */<br><br>    while &#40;1&#41; {<br>      if&#40;PeekMessage&#40;&amp;Message, gwxWin, 0, 0, PM_REMOVE&#41;&#41; {<br><br>	if&#40;Message.message==WM_QUIT&#41; <br>          break;<br><br>     &nbsp; TranslateMessage&#40;&amp;Message&#41;;<br>     &nbsp; DispatchMessage&#40;&amp;Message&#41;;<br>     &nbsp; Sleep&#40;1&#41;;<br>      }<br>      else {<br>     &nbsp; GetCursorPos&#40;&amp;point&#41;; <br>     &nbsp; win = WindowFromPoint&#40;point&#41;;<br>     &nbsp; /*     &nbsp; printf&#40;&#34;pos x %d y %d win %d&#092;n&#34;,point.x,point.y,win&#41;;  */<br><br>     &nbsp; /*     &nbsp; if&#40;win==winF77&#41; {<br>        SetActiveWindow&#40;win&#41;;<br>        SetFocus&#40;win&#41;;<br>        SetForegroundWindow&#40;win&#41;; <br>     &nbsp; } */<br>     &nbsp; /*     &nbsp; if&#40;win == winFG&#41; {<br>  printf&#40;&#34;pos x %d y %d win %d winFG %d&#092;n&#34;,point.x,point.y,win,winFG&#41;; <br>       &nbsp; SetActiveWindow&#40;winFG&#41;;<br>       &nbsp; SetFocus&#40;winFG&#41;;<br>       &nbsp; SetForegroundWindow&#40;winFG&#41;;<br>     &nbsp; } */<br>     &nbsp; Sleep&#40;1&#41;;<br>      } <br>    }<br><br>    /*    printf&#40;&#34;window thread ending&#092;n&#34;&#41;; */<br>/*  return Message.wParam;<br>    exit; */<br><br>//    _endthread&#40;&#41;;<br>	//Ivan Teplukhin has remarked<br><br>}<br><br>//////////////////дальше бесполезные комменты<br>/* gwxwinopen<br> &nbsp; Open window of specified size and position, return size and depth<br> &nbsp; Parameters&#58;  <br>   &nbsp; xstart,ystart          &#40;int*&#41; &nbsp; upper left corner coordinates in root<br>   &nbsp; xsize,ysize            &#40;int*&#41; &nbsp; desired window size<br>*/<br><br>/*void W32CALL <br>GWXWINOPEN &#40;int *xstart, int *ystart, int *xsize, int *ysize&#41;*/<br>//{<br>  /*<br>    printf&#40;&#34;GWXOPEN&#092;nxstart %d&#092;nystart %d&#092;nxsize %d&#092;nysize %d&#092;n&#34;,*xstart,*ystart,*xsize,*ysize&#41;;<br>  */  <br>//    wxstart  = *xstart;<br>//    wystart  = *ystart;<br>//    wxsize &nbsp; = *xsize;<br>//    wysize &nbsp; = *ysize;<br><br>    /* Start the window thread */<br>//    initthread = 0;<br>// &nbsp; _beginthread&#40;Thread1,0,NULL&#41;;<br><br><br>	//FOR PROPPER WORK THE THREAD MUST BE CREATED&#33;&#33;&#33;<br><br>    //    printf&#40;&#34;beginthread called&#092;n&#34;&#41;;<br><br>//    while&#40;&#33;initthread&#41; {<br>//      Sleep&#40;5&#41;;<br>	//  printf&#40;&#34;error in thread&#34;&#41;;<br>//    }<br><br><br>//}<br><br><br><br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>windsurfer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	