Changeset 1614


Ignore:
Timestamp:
Jun 9, 2010, 9:25:18 PM (12 years ago)
Author:
Sven Rech
Message:

qs fix

Location:
trunk/CrypPlugins/QuadraticSieve
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/QuadraticSieve/PeerToPeer.cs

    r1613 r1614  
    126126                            loadIndex++;                           
    127127                        }
    128                         else                //if there is nothing left to load, we can slow down.
     128                        else                //if there is nothing left to load, we can check if there is new data behind our local head
    129129                        {
    130130                            Thread.Sleep(10000);        //wait 10 seconds
    131131                        }
     132
    132133                    }
    133134                }
     
    142143        {
    143144            byte[] yield = ReadYield(loadIndex);
    144             downloaded += (uint)yield.Length;
    145             ShowTransfered(downloaded, uploaded);
    146             loadqueue.Enqueue(yield);
    147             SetProgressYield(loadIndex, YieldStatus.OthersLoaded);
    148             yieldEvent.Set();
    149             return downloaded;
     145            if (yield != null)
     146            {
     147                downloaded += (uint)yield.Length;
     148                ShowTransfered(downloaded, uploaded);
     149                loadqueue.Enqueue(yield);
     150                SetProgressYield(loadIndex, YieldStatus.OthersLoaded);
     151                yieldEvent.Set();
     152                return downloaded;
     153            }
     154            return 0;
    150155        }
    151156
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.cs

    r1613 r1614  
    153153            if (checkInUse())
    154154                return;
    155 
    156             usePeer2Peer = settings.UsePeer2Peer;
    157             if (usePeer2Peer && !P2PManager.Instance.IsP2PConnected())
    158             {
    159                 GuiLogMessage("No connection to Peer2Peer network. Sieving locally now!", NotificationLevel.Warning);
    160                 usePeer2Peer = false;
    161             }
    162             if (usePeer2Peer && settings.Channel.Trim() == "")
    163             {
    164                 GuiLogMessage("No channel for Peer2Peer network specified. Sieving locally now!", NotificationLevel.Warning);
    165                 usePeer2Peer = false;
    166             }
    167             if (usePeer2Peer)
    168             {
    169                 peerToPeer.SetChannel(settings.Channel);
    170                 peerToPeer.SetNumber(InputNumber);
    171             }
    172 
    173             if (useGnuplot)
    174                 gnuplotFile = new StreamWriter(Path.Combine(directoryName, "gnuplot.dat"), false);
    175                        
    176             userStopped = false;
    177 
    178             if (InputNumber != 0)
    179             {
    180                 if (InputNumber.ToString().Length >= 275)
    181                 {
    182                     GuiLogMessage("Input too big.", NotificationLevel.Error);
    183                     return;
    184                 }
    185 
    186                 String timeLeft_message = "?";
    187                 String endtime_message = "?";
    188                 String logging_message = "Starting quadratic sieve, please wait!";
    189 
    190                 GuiLogMessage(logging_message, NotificationLevel.Info);
    191                 quadraticSieveQuickWatchPresentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    192                 {
    193                     quadraticSieveQuickWatchPresentation.logging.Text = logging_message;
    194                     quadraticSieveQuickWatchPresentation.endTime.Text = endtime_message;
    195                     quadraticSieveQuickWatchPresentation.timeLeft.Text = timeLeft_message;
    196                     quadraticSieveQuickWatchPresentation.factorList.Items.Clear();
    197                     quadraticSieveQuickWatchPresentation.factorInfo.Content = "Searching trivial factors!";
    198                     if (usePeer2Peer)
    199                         quadraticSieveQuickWatchPresentation.relationsInfo.Content = "";
    200                     else
    201                         quadraticSieveQuickWatchPresentation.relationsInfo.Content = "Only local sieving!";
    202                 }
    203                 , null);   
    204 
    205                 DateTime start_time = DateTime.Now;
    206 
    207                 initMsieveDLL();
    208                 factorManager = new FactorManager(msieve.GetMethod("getPrimeFactors"), msieve.GetMethod("getCompositeFactors"), InputNumber);
    209                 factorManager.FactorsChanged += this.FactorsChanged;
    210 
    211                 //Now factorize:               
    212                 try
    213                 {
    214                     string file = Path.Combine(directoryName, "" + InputNumber + ".dat");
    215                     if (settings.DeleteCache && File.Exists(file))
    216                         File.Delete(file);
    217                     MethodInfo start = msieve.GetMethod("start");
    218                     start.Invoke(null, new object[] { InputNumber.ToString(), file });
    219                     obj = IntPtr.Zero;
    220                 }
    221                 catch (Exception ex)
    222                 {
    223                     GuiLogMessage("Error using msieve. " + ex.Message, NotificationLevel.Error);
    224                     stopThreads();
    225                     return;
    226                 }
    227 
    228                 if (!userStopped)
    229                 {
    230                     timeLeft_message = "0 seconds left";
    231                     endtime_message = "" + (DateTime.Now);
    232                     logging_message = "Sieving finished in " + (DateTime.Now - start_time) + "!";
     155            try
     156            {
     157                usePeer2Peer = settings.UsePeer2Peer;
     158                if (usePeer2Peer && !P2PManager.Instance.IsP2PConnected())
     159                {
     160                    GuiLogMessage("No connection to Peer2Peer network. Sieving locally now!", NotificationLevel.Warning);
     161                    usePeer2Peer = false;
     162                }
     163                if (usePeer2Peer && settings.Channel.Trim() == "")
     164                {
     165                    GuiLogMessage("No channel for Peer2Peer network specified. Sieving locally now!", NotificationLevel.Warning);
     166                    usePeer2Peer = false;
     167                }
     168                if (usePeer2Peer)
     169                {
     170                    peerToPeer.SetChannel(settings.Channel);
     171                    peerToPeer.SetNumber(InputNumber);
     172                }
     173
     174                if (useGnuplot)
     175                    gnuplotFile = new StreamWriter(Path.Combine(directoryName, "gnuplot.dat"), false);
     176
     177                userStopped = false;
     178
     179                if (InputNumber != 0)
     180                {
     181                    if (InputNumber.ToString().Length >= 275)
     182                    {
     183                        GuiLogMessage("Input too big.", NotificationLevel.Error);
     184                        return;
     185                    }
     186
     187                    String timeLeft_message = "?";
     188                    String endtime_message = "?";
     189                    String logging_message = "Starting quadratic sieve, please wait!";
    233190
    234191                    GuiLogMessage(logging_message, NotificationLevel.Info);
     
    238195                        quadraticSieveQuickWatchPresentation.endTime.Text = endtime_message;
    239196                        quadraticSieveQuickWatchPresentation.timeLeft.Text = timeLeft_message;
    240                         quadraticSieveQuickWatchPresentation.factorInfo.Content = "";
     197                        quadraticSieveQuickWatchPresentation.factorList.Items.Clear();
     198                        quadraticSieveQuickWatchPresentation.factorInfo.Content = "Searching trivial factors!";
     199                        if (usePeer2Peer)
     200                            quadraticSieveQuickWatchPresentation.relationsInfo.Content = "";
     201                        else
     202                            quadraticSieveQuickWatchPresentation.relationsInfo.Content = "Only local sieving!";
    241203                    }
    242204                    , null);
    243205
    244                     Debug.Assert(factorManager.CalculateNumber() == InputNumber);
    245                     OutputFactors = factorManager.getPrimeFactors();
    246                 }
    247                 else
    248                 {
    249                     timeLeft_message = "0 sec left";
    250                     endtime_message = "Stopped";
    251                     logging_message = "Stopped by user!";
    252 
    253                     GuiLogMessage(logging_message, NotificationLevel.Info);
    254                     quadraticSieveQuickWatchPresentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    255                     {
    256                         quadraticSieveQuickWatchPresentation.logging.Text = logging_message;
    257                         quadraticSieveQuickWatchPresentation.endTime.Text = endtime_message;
    258                         quadraticSieveQuickWatchPresentation.timeLeft.Text = timeLeft_message;
    259                         quadraticSieveQuickWatchPresentation.factorInfo.Content = "";
     206                    DateTime start_time = DateTime.Now;
     207
     208                    initMsieveDLL();
     209                    factorManager = new FactorManager(msieve.GetMethod("getPrimeFactors"), msieve.GetMethod("getCompositeFactors"), InputNumber);
     210                    factorManager.FactorsChanged += this.FactorsChanged;
     211
     212                    //Now factorize:               
     213                    try
     214                    {
     215                        string file = Path.Combine(directoryName, "" + InputNumber + ".dat");
     216                        if (settings.DeleteCache && File.Exists(file))
     217                            File.Delete(file);
     218                        MethodInfo start = msieve.GetMethod("start");
     219                        start.Invoke(null, new object[] { InputNumber.ToString(), file });
     220                        obj = IntPtr.Zero;
    260221                    }
    261                     , null);
    262                 }
    263                    
    264                 ProgressChanged(1, 1);
    265                
    266             }
    267             if (useGnuplot)
    268                 gnuplotFile.Close();
    269 
    270             alreadyInUse = false;
     222                    catch (Exception ex)
     223                    {
     224                        GuiLogMessage("Error using msieve. " + ex.Message, NotificationLevel.Error);
     225                        stopThreads();
     226                        return;
     227                    }
     228
     229                    if (!userStopped)
     230                    {
     231                        timeLeft_message = "0 seconds left";
     232                        endtime_message = "" + (DateTime.Now);
     233                        logging_message = "Sieving finished in " + (DateTime.Now - start_time) + "!";
     234
     235                        GuiLogMessage(logging_message, NotificationLevel.Info);
     236                        quadraticSieveQuickWatchPresentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     237                        {
     238                            quadraticSieveQuickWatchPresentation.logging.Text = logging_message;
     239                            quadraticSieveQuickWatchPresentation.endTime.Text = endtime_message;
     240                            quadraticSieveQuickWatchPresentation.timeLeft.Text = timeLeft_message;
     241                            quadraticSieveQuickWatchPresentation.factorInfo.Content = "";
     242                        }
     243                        , null);
     244
     245                        Debug.Assert(factorManager.CalculateNumber() == InputNumber);
     246                        OutputFactors = factorManager.getPrimeFactors();
     247                    }
     248                    else
     249                    {
     250                        timeLeft_message = "0 sec left";
     251                        endtime_message = "Stopped";
     252                        logging_message = "Stopped by user!";
     253
     254                        GuiLogMessage(logging_message, NotificationLevel.Info);
     255                        quadraticSieveQuickWatchPresentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     256                        {
     257                            quadraticSieveQuickWatchPresentation.logging.Text = logging_message;
     258                            quadraticSieveQuickWatchPresentation.endTime.Text = endtime_message;
     259                            quadraticSieveQuickWatchPresentation.timeLeft.Text = timeLeft_message;
     260                            quadraticSieveQuickWatchPresentation.factorInfo.Content = "";
     261                        }
     262                        , null);
     263                    }
     264
     265                    ProgressChanged(1, 1);
     266
     267                }
     268                if (useGnuplot)
     269                    gnuplotFile.Close();
     270            }
     271            finally
     272            {
     273                alreadyInUse = false;
     274            }
    271275        }
    272276
Note: See TracChangeset for help on using the changeset viewer.