Visualizzazione dei risultati da 1 a 10 su 27

Discussione: [c++] race-condition

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    errori a parte il codice è come questo. Ora stavo provando ad usare i comandi per le sezioni cridiche ma credo di avere una enorme lacuna; osservando il codice io scrivo:


    InizioSezioneCritica()
    Form1->Caption->Label1 = i;
    FineSezioneCritica()

    ho usato due comandi inventati; ma si direbbe che non devo proteggere i metodi, come invece ho scritto, ma solo le eventuali variabili globali condivise.


    codice:
    //---------------------------------------------------------------------------
    #include <vcl\vcl.h>
    
    #pragma hdrstop
    
    #include "Unit1.h"
    
    HANDLE MyThread;
    DWORD WINAPI ThreadTest( LPVOID lpParameter );
    DWORD ID1;
    
    //---------------------------------------------------------------------------
    
    #pragma link "Grids"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
     }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            MyThread=CreateThread(NULL,0,ThreadTest,NULL,0,&ID1);
            Form1->Caption = "Started.....";
    }
    //---------------------------------------------------------------------------
    
    DWORD WINAPI ThreadTest( LPVOID lpParameter )
    {
       for(int i=0; i<10000; i++)
                      Form1->Label1->Caption=i;
    
            Form1->Caption = "Stopped.....";
            Sleep(50);
    }
    //---------------------------------------------------------------------------

  2. #2
    Quote Originariamente inviata da misterx Visualizza il messaggio
    errori a parte il codice è come questo. Ora stavo provando ad usare i comandi per le sezioni cridiche ma credo di avere una enorme lacuna; osservando il codice io scrivo:
    Lascia stare le critical section, l'unico modo sensato di lavorare su GUI pensate per il single threading da altri thread è serializzare l'accesso ripassando per l'event loop, praticamente tutti i toolkit grafici hanno un qualche sistema per consentirti di eseguire codice nel thread GUI facendo questo giro (Control.Invoke in .NET, le queued connection in Qt, SendMessage più un messaggio "speciale" in Win32, ...).
    ---edit---
    Appunto, c'è TThread.Synchronize.
    Ultima modifica di MItaly; 02-04-2015 a 22:33
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Lascia stare le critical section, l'unico modo sensato di lavorare su GUI pensate per il single threading da altri thread è serializzare l'accesso ripassando per l'event loop, praticamente tutti i toolkit grafici hanno un qualche sistema per consentirti di eseguire codice nel thread GUI facendo questo giro (Control.Invoke in .NET, le queued connection in Qt, SendMessage più un messaggio "speciale" in Win32, ...).
    ---edit---
    Appunto, c'è TThread.Synchronize.

    grazie 1000, mi hai chiarito molti dubbi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.