NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: Spustenie vlakna a vytvorenie objektu vo vlakne

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tayson
Člen
Avatar
Tayson:13.11.2014 11:44

Zdravim vo visual studiu 2010 v projekte MFC potrebujem spustit vlakno a ulozit si v tom vlakne data do premennej pole.
Kod vyzera takto:

typedef struct MyData {
    char* name_file;
    char* name_sheet;
} MYDATA, *PMYDATA;

DWORD WINAPI  ExcelReadCellThread(LPVOID pParam)
{
   pDataArray = (PMYDATA)pParam;
   cfile.Open(pDataArray->name_file, CFile::modeRead);

   while(true)
   {
           if(cfile.GetStatus(status))
           {
                  if(m_prevTime != status.m_mtime)
                  {
                                CString tempString;

                                CSpreadSheet SS(pDataArray->name_file, pDataArray->name_sheet);

                                SS.BeginTransaction();

                                SS.ReadCell(tempString, 1, 1);

                                pole.Copy(SS.m_aRows);
                  }
                  m_prevTime = status.m_mtime;
           }
       Sleep(1000);
   }
   return 0;
}

char far * PASCAL ExcelReadCell(char *name_file, char *name_sheet, int riadok, int stlpec)
{
        CString row;

        pDataArray->name_file=name_file;
        pDataArray->name_sheet=name_sheet;

        if(hThreadArray == NULL)
        {
            //ExcelReadCellThread(name_file, name_sheet);
                hThreadArray = CreateThread(NULL,  0, ExcelReadCellThread, pDataArray, 0, NULL);
        }

        row=pole[riadok];

        CString separator (_T(",;.?"));
        CStringArray trimData;

        int iPos = 0;

        while (iPos != -1)
        {
                TCHAR* pszSrc = row.GetBuffer() + iPos;
                int             iOldPos = iPos;
                iPos = row.Find(separator, iOldPos);
                if (iPos != -1)
                {
                        int iLength = iPos - iOldPos;
                        iPos += separator.GetLength();
                        CString str(pszSrc, iLength);
                        trimData.Add(str);
                }
                else
                {
                        int iLength = row.GetLength() - iOldPos;
                        CString str(pszSrc, iLength);
                        trimData.Add(str);
                }
        }

        CString cell=trimData[stlpec];
        cell=cell.Mid(1, cell.GetLength()-2);
        sprintf_s(value, "%s", cell);

        return value;
}

NTo vlakno mi ide spustit mam pocit ale neodosle data do vlakna a potom tu premennu pole do ktorej v tom vlakne kopirujem tak je prazdna a neviem ci k nej mam pristup a neviem ze ci dobre vytvaram objekt na danu triedu. Dakujem za pomoc

 
Odpovědět
13.11.2014 11:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.