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.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx
na dole jest przykład.
Źle przekazujesz parametry do wątku.
Mam komunikat: invalid conversion from 'Dword' to 'dword()(void)'
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.
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?
Niestety już nie. Musisz przerobić to na klasy.
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
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();
Z definicją mam problem:< losowanie(size_t count):count(count),vector(new int[count]),id(0)> Wyskakuje mi błąd:
expected ')' befote "count"
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.
I nie polecę dalej składnia się kłania.
wziąłem na żywca przekopiowałem. nie pomogło. Używam dev-c++. Ten sam komunikat.
Komunikat błedu tej lini:
expected','before"count"
expected',' or';' before"count"
Czyżby próbowałeś wsadzić klasę do pliku z rozszerzeniem .c ?