|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
ho fatto così
void CTestdsp3Dlg: { // TODO: Add your control notification handler code here HANDLE hThread = CreateThread(NULL, 0, VelMediaThread, &m_bStopPlot, 0, NULL); } ho dichiarato una variabile membro booleana m_bStopPlot. Ho inserito la funzione membro nell'header così DWORD WINAPI VelMediaThread(LPVOID pExitCheck); e poi ho dichirarto così la funzione DWORD WINAPI CTestdsp3Dlg::VelMediaThread(LPVOID pExitCheck) { ..... } mi da questo errore C:\Documents and Settings\squillante\Desktop\testdsp3\testdsp3Dlg.cpp(419) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)' che ho combinato?
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#23 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
me tapino... nn ci ho capito molto....
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
allora...
nell'header devo dichiarare la funzione come static DWORD WINAPI CMiaClasse::ProvaThread(..) ? ma la chiamata nel pulsante "avvia" resta uguale?
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La chaimata sarà così:
Codice:
void CTestdsp3Dlg:nDisegnaBUTTON()
{
HANDLE hThread = CreateThread(NULL, 0, VelMediaThread,
this, 0, NULL);
}
DWORD WINAPI CTestdsp3Dlg::VelMediaThread(LPVOID pTestdsp3Dlg)
{
CTestdsp3Dlg &testdsp3Dlg = *(CTestdsp3Dlg *)pTestdsp3Dlg;
for(...)
{
.....
if(testdsp3Dlg.m_bStopPlot)
break;
}
return 0;
}
|
|
|
|
|
|
#27 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
class CTestdsp3Dlg { ... ... static DWORD WINAPI VelMediaThread(LPVOID pTestdsp3Dlg); } |
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
sto facendo una prova
in pratica alla funzione VelMediaThread quando viene chiamata faccio comparire un mess a video con MessageBox perchè mi dice C:\Documents and Settings\squillante\Desktop\testdsp3\testdsp3Dlg.cpp(264) : error C2352: 'CWnd::MessageBoxA' : illegal call of non-static member function
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
ops, forse ho capito cosa sbagliavo...
ora ho fatto un programmino prova, in cui il thread dichiarato inùcrementa ll'infinito un numero (visualizzato a video) nell'header static DWORD WINAPI ThreadProc(LPVOID pThrClasse); nel file .cpp della finestra di dialogo DWORD WINAPI CThreadsDlg::ThreadProc(LPVOID pThrClasse) { CThreadsDlg &thread = *(CThreadsDlg *)pThrClasse; thread.Incrementa(); return 0; } ho poi definito sta funzione (guarda come sono grezzo nel programmare) void CThreadsDlg::Incrementa() { int i; char p[10]; for (i=0;;i++) { itoa(i,p,10); m_iThr1 = p; UpdateData(FALSE); } } quindi, nella funzione chiamata dal pulsante avvia void CThreadsDlg: { // TODO: Add your control notification handler code here HANDLE hThread = CreateThread(NULL, 0, ThreadProc, this, 0, NULL); } quando premo avvia, mi da errore di debug (debug assertion failed, file wincore.cpp, line 879) che sbaglio? (ovviamente, se setto Release come configurazione va bene... ????
__________________
ho fatto affari con: na decina di anime Ultima modifica di swarm : 01-02-2006 alle 15:27. |
|
|
|
|
|
#30 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
sembra che il problema insorga quando chiamo la funzione UpdateData.
Lascio perdere?
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ci guardo domani mattina...ora non posso
|
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
GRAZIEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ottengo anche io lo stesso errore...eppure lo usato in altre occasioni questo metodo... Ora vado a vedere i codici vecchi...
|
|
|
|
|
|
#35 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
confido in te.....
nn sarà che sbaglio a fare UpdateData ogni volta?
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#36 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah...cacchio...ora mi ricordo... Puoi condividere dati, ma l'interfacciamento con la GUI lo devi fare a scambio di messaggi !!!
|
|
|
|
|
|
#37 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
usare funzioni tipo PostMessage? cavolaccio......
__________________
ho fatto affari con: na decina di anime Ultima modifica di swarm : 03-02-2006 alle 10:24. |
|
|
|
|
|
|
#38 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' facile !!! Basta che tu faccia un messaggio che fa chiamare UpdateData...sui dati ci lavori in maniera trasparente !!!
Codice:
//definisco un messaggio che è valido solo all'interno dell'applicazione
#define WM_UPDATEDATA WM_USER+10000
.....
.....
BEGIN_MESSAGE_MAP(CprovaMFCDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)
END_MESSAGE_MAP()
.....
.....
void CprovaMFCDlg::OnBnClickedButton1()
{
mStopThread = mStopThread != true;
if(mStopThread == false)
{
CreateThread(NULL, 0, ThreadFunction, this, 0, NULL);
}
}
DWORD WINAPI CprovaMFCDlg::ThreadFunction(LPVOID objPointer)
{
CprovaMFCDlg *dlg = (CprovaMFCDlg *)objPointer;
while(!dlg->mStopThread)
{
Sleep(1000);
dlg->mEditValue++;
dlg->SendMessage(WM_UPDATEDATA);
}
return 0;
}
//questo gestisce il messaggio WM_UPDATEDATA
LRESULT CprovaMFCDlg::OnUpdateData(WPARAM param1, LPARAM param2)
{
UpdateData(FALSE);
return 0;
}
Ogni volta che fa l'aggiornamento invia un messaggio che fa eseguire l'update... |
|
|
|
|
|
#39 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
sembra abba chiaro (per me, nn che iltuo esempio nn lo sia....)
domande: perche fai così mStopThread = mStopThread !=true; poi nel while, a che serve Sleep(1000)? un ritardo(di 1 sec)? questa procedura che mi hai mostrato la ripeto per ogni messaggio che mi serve? Grazie, sei un grande...
__________________
ho fatto affari con: na decina di anime |
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La sleep l'ho messa solo per far incrementare la variabile una volta al secondo...
mStopThread = mStopThread != true; mi è rimasto lì per sbaglio, volevo intendere questo: mStopThread = !mStopThread; In pratica nego il valore corrente di mStopThread...e lo riassegno a mStopThread...ma questo te lo puoi gestire come più ti aggrada, l'importante è che quando viene eseguito per le prima volta il ciclo (o il controllo del tuo for) nel thread mStopThread sia false... Mi sembra di aver capito il tuo thread deve disegnare un grafico...in tal caso io comunque sospenderei il thread fino a quando il pixel non è stato disegnato... Quindi la sequenza da fare sarebbe: Codice:
dlg->drawn = false; setti tutti i dati per disegnare il pixel... dlg->SendMessage(WM_UPDATEDATA); //per aggiornare eventuali variabili dell'interfaccia dlg->SendMessage(WM_DRAWDATA); //per disegnare il grafico while(!dlg->drawn) Sleep(1); Ovviamente la funzione che gestisce il messaggio deve settare drawn a true prima del return... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:29.



















