proste wielowątkowości

0

Witam mam problem z utworzeniem prostego wątku potomnego, poza głównym.<void WINAPI vektor_los(int vektor[], size_t count) ..... > ,a dalej <... CreateThread(NULL,0,vektor_los(vek,10),NULL,0,& idWatku);> idWatku zadeklarowane jako DWORD w main. Komunikat jaki mam to: invalid use of void expression. Pracuje w trybie konsolowym.

0

Źle przekazujesz parametry do wątku.

0

Mam komunikat: invalid conversion from 'Dword' to 'dword()(void)'

0

CreateThread(NULL,0,vektor_los,parametr przekazywany do wątku,0,& idWatku), jeżeli chcesz przekazać więcej niż 1 parametr, to możesz użyć struktury, która będzie przechowywała potrzebne zmienne.

0

Funkcja vektor_los w poprzedniej wersji przekazywała za pośrednictwem argumentów, do programu głównego wektor[10] elementowy .Czy jest możliwe to również w wątku?

0

Niestety już nie. Musisz przerobić to na klasy.

0

mam coś takiego:

#include <iostream> 
#include <conio.h> 
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
//classa losowanie
class losowanie
      {
      public:
     DWORD wejscie;
     void vektor_los(int vektor[],size_t count);
      };
      
//funkcja-1 
void losowanie::vektor_los(int vektor[],size_t count)
{
    int ran;
for(int j=0; j<6; j++)
        {
       ran=rand();
       vektor[j]=ran%100;     
        }
    
     return;
     }
DWORD WINAPI vektor_los(int vektor[],size_t count);

 main()
{
 int vek[10];
srand(static_cast<int>(time(NULL)));
 getch(); 
  int x=6;
  DWORD idWatku;
    int k=1; 
    int vektor[10];
      for(int i=0; i<9000000; i++) 
  { 
// CreateThread(NULL, 0, losowanie, NULL, 0, &idWatku);//
  vektor_los(vek,10);   

          if( vek[6]>0 && vek[6]<5)
           {
cout<<k<<"\t";                           
cout<<vek[3]<<vek[6]<<"\t"<<"\n"; 
             if(k==1)
             {
                    PlaySound(TEXT("Error.wav"),NULL,SND_FILENAME);
           // _beep(2000,50);
             k++;
             }
            else
            k--;
          }
     
  } 
       getch();
 return 0; 

}

komunikat jaki otrzymuje w lini CreateThread to :

xx.cpp expected primary-expression before ',' token

0
struct losowanie
  {
   size_t count;
   int *vector,
   DWORD id;
   losowanie(size_t count):count(count),vector(new int[count]),id(0) {}
  ~losowanie() { delete[] vector; }
   DWORD ThreadProc() { vektor_los(vector,count); return 0; }
   static DWORD _ThreadProc(losowanie &L) { return L.ThreadProc(); }
   void run() { CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&_ThreadProc,(void*)this,0,&id); }
  };

losowanie L(10);
L.run();
0

Z definicją mam problem:< losowanie(size_t count):count(count),vector(new int[count]),id(0)> Wyskakuje mi błąd:
expected ')' befote "count"

0

Nigdy nie uważałem się za orła. Często się zdarza że nie jestem w stanie obsłużyć błędu. Dopiero uczę się programowania.

0

I nie polecę dalej składnia się kłania.

0

wziąłem na żywca przekopiowałem. nie pomogło. Używam dev-c++. Ten sam komunikat.

0

Komunikat błedu tej lini:
expected','before"count"
expected',' or';' before"count"

0

Czyżby próbowałeś wsadzić klasę do pliku z rozszerzeniem .c ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1